There are a few main issues with IPv4:
1. Everybody wants to have a public IP address, and that is making the available IP addresses run out really fast; 2. There are huge chunks of allocated addresses that are in fact unused. And there are also a number of public addressable /8's being used for internal networks for no good reason; 3. Splitting up wasted /8's in (geographically disperse) small chunks isn't feasible because routing tables would get huge.
No. 1 is easy to solve: not everybody needs a public IP address, no matter what people say. Mobile phones can survive just fine with private addressing behind a NAT. Public addresses for mobile users could be handed out on a case-by-case basis, for an additional fee.
No. 2 will come into play once we run out of address space. Scarcity will trigger a market for IPv4 addresses, and as any scarce resource, its use will be rationalized and made more efficient.
No. 3 is the most tricky. But that's where IPv6 really appears as the problem solver. Internet backbones will have a different structure than the IPv4 addressing implies, and that structure will be made with IPv6. IPv4 will be tunneled over IPv6 networks with its own structure. In fact, this has been done for a long while inside the ISP's networks using MPLS (IP packets enter the ISP network and are then routed using MPLS until they exit into another ISP/carrier's network). Those multiple MPLS domains will become a single IPv6 domain.
The structure of the Internet will change when IPv4 addresses become scarce, that's for sure, but I seriously doubt IPv6 will gain acceptance at the network endpoints. There is just too much legacy for that to happen in the next 30 years at least.
I belive in scarcity dynamics, so I'm not too worried. Also I also belive NAT to be a good solution for private networks and don't agree with the view that NAT is evil.