So IPv6 has functional replacements for most of the advantages of NAT, but those functional replacements generate significantly more admin work to implement. For example pseudo-random IP's + local-only addresses to replace NAT's topology-hiding? Gimme a frikkin break. With IPv4+NAT I assign 1 address per machine that's in local DNS/hosts files, is routable across the NAT'd subnet/private network and is fully memorable on smaller networks or any network with standard subnet numbering (.1 is always router, .2 always DNS or some such system). And I can easily track which machines are hitting the internet. With IPv6 I need to assign one ULA IP and then the machine generates its own pseudo-random IP for external access. Neither are human-readable. And tracking internet usage is far more complex since the pseudo-random IP obscures the info from me (a PITA when trying to track down exactly which idiot salesman's laptop is spewing spam out of the network, that's otherwise trivial with a good firewall).
And when working behind a proper firewall running 1:1 NAT I'm now losing one of the main benefits of direct IP-private IP mapping, IE I can bring up a replacement server, get it fully running & tested and then swap it into production with a single, instant change on the firewall to switch it up (and a single-line config change to revert) and I'm back to swapping IP's on multiple machines to do this (and this is one of the two main reasons to use NAT in a data centre application, the other being to hide support servers from the outside, which is less of an issue with IPv6 to be sure).
So yes, IPv6 has solutions. But they're significantly more labour-intensive than under IPv4.