You can configure your shipping to be "zone sensitive". The customer will then only be offered a shipping option if his/her shipping address meets the geographical limiters of a specific zone.
I set up a UK site (that ships ONLY to UK addresses), but had the additional requirement of configuring Royal Mail and ParcelForce options for UK island zones, mainland zones, Scottish Highlands and Channel Islands.
Royal Mail and Parcelforce24 fees differ widely on these complicated regions, and an added parameter is shipping weight.
So we had to create shipping modules that handled a combination of:
Total Consignment Weight, Shipping Address, and Cost.
If you go to www . edutrade . co . uk and put something in the shopping cart, then play around with quantities and the shipping estimator, you will see how the shipping cost changes when the zone changes, AND when the total weight changes.
If the weight exceeds 2kg in any circumstance, then ONLY Parcelforce24 will show (with the appropriate cost for the zone).
If the weight is under 2kg, then ONLY Royal Mail will show (again, with prices appropriate for the selected UK zone).
This involved cloning the table rate module three times, and putting in a conditional that enabled the modules if the consignment weight was over or under 2kg.
A bit complicated (as we had to build the zones too), but it works a treat.
Customers are offered the exact shipping according to the WEIGHT, PRICE and REGION they want the goods sent to.