There are two reasons mobile network operators are giving out private IP addresses to mobile users and map the traffic over a Network Address Translation (NAT) gateway to and from the Internet. The first is that IPv4 addresses are a scarce resource and assigning a public IP address to every user would require a huge pool. The second is reason battery drain. As public IPv4 addresses get reassigned, unsolicited packets can arrive at the mobile device for example from file sharing applications that were intended for the previous owner of the IP address, from virus- and other malware programs probing computers for potential weaknesses and from other origins. This phenomenon can be nicely observed in networks that use public IP addresses like Vodafone Spain for example and drain the battery really fast as the air interface is constantly in connected state. NAT keeps those packets from coming in which is good for battery consumption. On the other hand, network address translation renders services running on the mobile device that are waiting for incoming connections useless.
IPv6 can easily fix the later problem as the address space is so huge that each mobile device gets assigned a full 64 bit address space from which a network identifier (the other 64 bit of the address) can then be selected. The network operator is assigned a 32 bit part of the IPv6 address (for details see the German version of the Wikipedia entry on IPv6) which means that almost 4.3 billion devices can be hosted with a single assignment. So will that help with the power consumption problem due to unsolicited packets? If subnets are randomly assigned, then that might just do the trick as spamming such a large address space with unsolicited packets is likely to be quite difficult if not impossible.
IPv6 enthusiasts out there, what do you think?