First, the IPv4 address space is tiny. Say, a PING packet is 84 bytes, so pinging the entire IPv4 address space will take you all of 336GB of traffic each way (not even accounting for the reserved parts). That can be done in the space of an hour in a decent connection. So things can and are being trivially found by brute force. If a vulnerability is found in something interesting you can bet that by tomorrow lots of nefarious people figured out who can be broken into.
Second, IPv6 has the privacy extensions, which means that even if somebody knows your address today, this has a very limited lifetime to it. Privacy extensions regularly randomize your IP address.
Under IPv6 even normal people can get more address space than can be reasonably scanned. This makes it harder to identify machines permanently, makes it harder to figure out how many machines there are and makes brute force scanning extremely impractical.
With ipv6 privacy extensions, your IP address changes every few minutes (withoin the same /64 network) so it's not a lot different (privacy wise) than today, wher that whole network would be hidden behind a single IPv4 address.
This can indeed be replaced with firewalls on each IPv6 client, but you have to concede that just putting a router between your computer and modem adds a ton of security for very little effort or know-how.
But NAT in itself is a workaround for IPv4 limitations with significant problems, which has become permanent because there's nothing as permanent as temporary solutions.
This is so basic that any argument against it needs some strong evidence.
You can search "IPv6 pinhole" and find plenty of documentation from router manufacturers and ISPs on this.
Why? Firewalls have been around since before 1994, when Cheswick and Bellovin literally published the book on firewalls:
* https://en.wikipedia.org/wiki/Firewalls_and_Internet_Securit...
You say this like it's a bad thing.
Why should it be necessary to have to deal with all the extraneous infrastructure of STUN/TURN/ICE just for basic connectivity?
* https://en.wikipedia.org/wiki/STUN
* https://en.wikipedia.org/wiki/Interactive_Connectivity_Estab...
You have your stateful firewall that does default-deny, only allowing in packets that are replies to internally-initiated sessions. If you need to do hole punching you have UPnP or PCP (which also allows for authentication of requests):
* https://en.wikipedia.org/wiki/Internet_Gateway_Device_Protoc...