I encountered a situation where it was necessary to refresh the shipping cost estimate on a Magento2 site.

A solution is provided by Alan Storm:

requirejs([
    'Magento_Checkout/js/model/quote',
    'Magento_Checkout/js/model/shipping-rate-registry'
], function(quote, rateRegistry){
    var address = quote.shippingAddress();

    address.trigger_reload = new Date().getTime();

    rateRegistry.set(address.getKey(), null);
    rateRegistry.set(address.getCacheKey(), null);

    quote.shippingAddress(address);
});

However a small change is required for Magento 2.3 at least (likely 2.2+):

requirejs([
    'Magento_Checkout/js/model/quote',
    'Magento_Checkout/js/model/cart/cache',
    'Magento_Checkout/js/model/shipping-rate-registry'
], function(quote, rateRegistry, cartCache){
    var address = quote.shippingAddress();

    address.trigger_reload = new Date().getTime();

    rateRegistry.set(address.getKey(), null);
    rateRegistry.set(address.getCacheKey(), null);

    cartCache.clear('rates');

    quote.shippingAddress(address);
});