Hi,
Namekeys are used when we need to insert default data across several tables.
For example, for the zones, the data is inserted in both zone and zone_link tables.
If we wanted to use zone ids in the zone_link table, after import the 5000 zones during the install, we would have to load all the zones ids to insert the correct links in the zone_link table. To do that we need to match one column value with the correpsonding id. If you suppose that two zones could have the same name or same code (that happens for some states actually), you need something else which is unique, thus the namekey field.
Also, that can be a savior in some extreme cases: suppose that you delete all your zones but that you already had orders with addresses. If we had used zone ids to dynamically link the country and the state from the zone table, the information will be completely lost. With namekeys, even if the name isn't "nice" it still contains the name of the zone.
Also, there is still a zone id which is auto incremented as it is still used in some cases.