Hi @micheal,
A transaction needs to be externally initiated. You could write a script to check if there are any refunds and if there are create a transaction to refund. You could then create infrastructure to run this periodically e.g. every 5 minutes.
You could use OpenZeppelin Defender Autotasks to handle running a script periodically.
I suggest joining the weekly webinar to learn more: Webinar: Introduction to OpenZeppelin Defender - Wednesday 10 February 2021
You had asked about gasless transactions so you may be interested in the workshop too: Workshop: Gasless MetaTransactions with OpenZeppelin Defender - Thursday 11 February 2021