Re: Backwards compatible
People already moan constantly about how "complicated" v6 is, despite v6 using the same addressing and routing model as v4. I can only imagine how bad it would be if you introduced variable-length addresses, which would be an actual additional complication over v4.
But also I don't think making v6 have variable length addresses would help much, because the thing you're trying to make it compatible with is v4 and v4 doesn't have variable-length addresses, so it wouldn't be able to cope with any address length beyond 32 bits. "Send your packets to 100.64.10.10 with the extra address bits stored somewhere else in the packet" sounds an awful lot like 6to4, which already exists in v6, so if that's sufficient for being backwards compatible then v6 is already there.
Variable length addresses wouldn't save you from needing to fix software to handle the new address family (and that's going to be fun, what with all existing code being designed around fixed-length addresses. The prevalence of buffer overrun bugs suggests that many programmers can't cope with things that have variable length...).
The other major issue is that routing performance wouldn't be great, since handling a variable length address in hardware is not very fast. That would probably result in adoption happen slower rather than faster.