Welcome to the Catalog community.
I think there might be multiple methods to handle what you're asking but let me see if I can answer specific pieces of your post. I'm no expert so hopefully some more experienced members will chime in if I misspeak here.
Refunds - You are correct and there is no way to initiate a refund in Catalog itself. You have to go into your payment gateway and initiate the refund from there.
Regarding the Catalog Analytics for revenue, you can "manage" the revenue in the Orders analytics. So if you see an order for Course A, you can change the revenue for that to $0 if you refund the order.
If you are syncing Catalog to the attached Canvas instance and you remove the learner from the course via Canvas, the enrollment for the user will show as "Dropped" and not "Active" in the Enrollment analytics in Catalog. On that note, you could also manually enroll the user in Course B and then make a note in the Order analytics that the user switched course (without issuing a refund).
That said, I haven't had to do this specifically, but I think you could probably accomplish it via the API as well. I'm actually very curious if you could modify the enrollment via Catalog API. I need to look into that.