The way to make IPv6 "backwards compatible" would have been to make addresses variable-length. Initially, all addresses would just happen to be 32 bits in length. But after everyone's converted over, then you start handing out addresses that are longer than 32 bits. In 20 years we'd have gotten there by now.
Variable length addresses would have been compatible with existing routing algorithms that look for the "most specific route" and would give *every* node the ability to split its own address into a network. For example, if your ISP assigns you 100.64.10.10, you could subnet it into 100.64.10.10.1, 100.64.10.10.2, etc. and then downstream you could do the same thing with 100.64.10.10.2.1, 100.64.10.10.2.2, etc. And when someone on the other side of the world sends a packet deep into your network, the most specific address on the public Internet is still 100.64.10.10, and it goes to your router.
Think that's silly? Keep in mind that SNMP OID's are assigned *exactly* this way. You get your *one* number, and you can put as many levels underneath it as you want.