there's nothing wrong with ND and it addresses several security vulnerabilities, namely ARP cache poisoning. But the real reason why ARP was removed is because it's a layering violation.
> NAT support (because it's everywhere these days)
nothing at all is stopping you from doing NAT on IPv6, except for the fact that everyone hates NAT, even people that pretend that they like it.
> Correct DHCP support (SLAAC wasn't a great idea after all)
SLAAC is a great thing. Also, DHCPv6 also exists, which allows you to do exactly what DHCP lets you do. Android doesn't support DHCPv6, but that's not IPv6s fault.
- IPv6->IPv4 interop (one way)
There's no such thing as one-way communication if we're talking TCP. Besides, it's still fundamentally impossible if the other end has no idea what to do with the source address.