the Internet is almost out of IPv4 addresses, and the ones that are left are becoming expensive to obtain. Rather than hide whole blocks of users behind NAT, they can just use IPv6.
I don't want to have my own IP, at least not without frequent changes. My servers should have static IPs but having static IPs at home or for mobile devices only makes tracking easier..
Mostly because we've invested huge amounts of engineering effort to work around the problems. The result is that for the most common use cases, things mostly work.
NAT systems are optimized for a few devices to be active at a time. As the number grows they might not co-operate well. Game consoles are infamous for networking problems when you have anything other than a single machine.
And the Wifi router is at least under my control (although depending on where you live and which ISP you use even that isn't necessarily true), so I can still set up some port forwarding for my internal devices as required. Because of the shortage of IPv4 addresses however carrier-grade NAT is becoming more and more common, which is truly an abomination.
... which creates all sorts of routing issues.
If you don't have your own publicly accessible IP address it creates all sorts of connection issues.