RE 2 the ITU/ISO has a definitive list of 2 and 3 letter codes to define countrys. It is certainly the source I used when building the country standing data tables for a BT billing system back in the day.
That is a ISO standard definitive list of places, some of them are generally not considered to be countries (e.g. SJ Svalbard and Jan Mayen, VG British Virgin Islands) and some claim to be countries but are not recognised by some other countries, (e.g. TW Taiwan and PS Palestine, EH Western Sahara)
Apologies for bringing in hotly disputed territories of the world, but that's basically what this thread is about. I'm not making a political argument for or against any of those places, just saying that there is disagreement.
That said, I would (and do) use ISO two letter codes to identify territories in my code.
In this application we had to use both the two and 3 digit alpha ones plus the numerical ones (for telex/fax billing).
I also recall receiving a sad email from my colleges in Yugoslavia describing how the country was splitting up and how we where to adjust our routing tables.
The list includes all overseas departements of France separately, leaving one to wonder whether you should choose "Réunion" or "France" every time you order something from abroad (I always used "France" and it works fine, it just means at least four entries in all country lists are useless). It also means France gets to have a lot more TLDs than most countries, which is nice.