Network address translation (NAT) has become so common on the Internet that many people consider it normal for their Internet access to use NAT. It may be common, but it is not how the Internet is supposed to work. A large amount of unnecessary complexity has to be added to applications to work around NAT.
For more information take a look at this list of things NAT breaks.
And just for the record, NAT is not a security device. This is the most common argument I hear when I try to tell people how much NAT complicates Internet software. For more information on NAT and security read this NANOG thread (the topic changes to security and NAT a few posts in).
I think a lot of people conflate NATs with firewalls because they are often used together.
However, NAT is necessary, because ISPs charge extra money for IPs that the end users don’t want to pay for.
All the Links are down
NANOG archives have moved. You can now find the NANOG thread at http://www.nanog.org/mailinglist/mailarchives/old_archive/2007-06/msg00010.html