The person calling the transaction always supplies the gas used in that transaction.
If the contract called throws an exception, or tries to send funds back to the sender for some reason, that will use the gas provided by the person calling the original transaction.
However, on the same logic, once the contract has received the funds and the initial transaction has been completed, if they were later to be returned to the original sender in a new transaction, it would be whoever triggers that new transaction that pays for the gas to do it.
Although there is no way around the initial need for the person who triggers a transaction to pay for the gas for it, it is possible to program a contract such that it sends an equivalent amount to the sender of the transaction, creating a de-facto refund. For example, the Ethereum Alarm Clock allows somebody who wants a transaction to be called at a future date to provide the funds for that call in advance. At the appropriate time some arbitrary person can then call the contract, providing the gas for it, but will be refunded with the money originally provided by the person requesting the call, along with a bonus to reward them for their effort.