As you've noticed, there's extensive coupling among the custom, address, quote, and shipping objects which hampers what you are trying to accomplish. However, if you dig into the carrier, rate_request and rate_result models, the architecture is pretty simple. You only need to know which methods apply to your default address, and you may need to also know order total, weight, and/or number of packages. Then you can construct the rate_request object which Magento expects; see
public function collectRatesByAddress(Varien_Object $address, $limitCarrier = null)
/** @var $request Mage_Shipping_Model_Rate_Request */
$request = Mage::getModel('shipping/rate_request');
I think that you can just handle this with a custom block type, and note that there is a result cache which should be honored. Various factors for your instance can affect the complexity of this customization (currencies, multiple carriers, complex shipment pricing, etc).