It's actually crazy how late this was. Because customers don't like to see forty surcharges, you have an incentive to bundle relatively cheap things most or all customers want.
What gets bundled and what doesn't is somewhat† a matter of company preference. And once IPv4 exhaustion was on the horizon, charging IPv4 separately made a lot of sense yet very few providers did it.
† The EU hates "hidden fees". If your product claims to cost €100 but actually there's no way to only buy the €100 product, you need "delivery" for €25 more because there's no practical way to avoid getting it delivered - that's not legal. Likewise if you claim it costs €100 but there's no way to pay cash, and all card payments have a 5% surcharge, you're going to either have to eat that surcharge, or advertise the price including the card surcharge.
CGNAT is standard on mobile connections, it's more common than getting your own IPv4 address. Over the last few years, it's becoming increasingly common for residential connections, because ISPs can no longer get additional IPs for free from their regional numbering registry.
It's now cheaper for ISPs to deploy CGNAT than to purchase new IP blocks. Since IPv4 is provided for legacy compatibility, performance is not a priority.
> users' modem/router combos, and those are pretty fast and reliable
What? No, most of the infrastructure you see deployed at users home is trash. Majority of people don't buy their own network gear to replace the ISP gear they receive when signing up and ISP skimps on the costs of hardware for customers.
Does anyone give me more money for using IPv6? Sure I might be able to save some money by not using IPv4 but that is rare.
Government doesn't incentivize it. Ad networks don't either. There is very little penalty (financial or otherwise) for not going to IPv6.
IPv6 will not happen until those sticks and carrots get bigger.