Always prompt for a shipping address even if there are no shippable products with Ubercart
The only work around for this is to alter the UPS module yourself or report it as bug, (because in my opinion, this is a bug.)

You could probably write a module that would override the UPS module to circumvent the above suggestions. You have pretty clearly hit the nail on the head though. The problem is not Ubercart but the modules that are interacting with it inappropriately. I know the FedEx module takes into account shipable products, if my memory serves me correctly.

The entire shipping pane should be hidden if there are no shipable items. (That is the point of having that option in the products.)