Change Ubercart shipping/billing layout & logic?
You can change the order here:

admin/store/settings/checkout/edit/panes

But you cannot dynamically determine whether the shipping is required. (at least not without tweaking the code.)

Do you really need to offer both anyway? (how often person A buys tickets that need to be sent to person B?)