Magento Voiding orders via backend
I had to work on a very similar task with Braintree, in that they also only allowed refunds after the order was settled & you could only void before that. This is not a core Magento bug as it is something specific to (some) payment gateways. Also the specific api calls differ, so it makes sense that the Magento team cannot provide a general solution.
The solution that would apply to this case is to do an AJAX call, see if the transaction is not settled and if so do a "void" call instead of a "refund". Unless the UsaEPay module vendor would do this for you, it is something that you should implement.
I can't say for sure about UsaEPay
, but you can only void an order that has not been invoiced when using authorize.net. in authorize.net, when you 'authorize and capture', voiding is no longer possible. perhaps it's the same with UsaEPay
?