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).