And yet NAT solves more problems than it causes.
It by default ensures that machines inside a network are not reachable from the outside world. It gives you one address to the outside world which made IP blocks for abuse work quite well and enabled a lot of other users.
Sure, it's a bit of a pain for UDP communication but given the common NAT behaviours not completely terrible. If it was defined a bit clearer NAT would not have been that controversial.
For me that's a core feature of NAT, not something that breaks the internet.
It doesn't help that it's a shitty hack which causes endless lost time either spent wondering why something is broken, or through designing entire protocols just to get around it.