Same thing can be said about Streams in Node.js as well. They had a working streams implementation before the Web Streams API was in browsers (iirc). So implementing the standard now means removing what's already there, or breaking a lot of existing code.
Which leads to confusing things like the fact that there are two streams APIs in Node now:
Streams: https://nodejs.org/docs/latest/api/stream.html
Web Streams: https://nodejs.org/docs/latest/api/webstreams.html
And they have to support going back and forth between the two: https://nodejs.org/docs/latest/api/webstreams.html#nodejs-st...
It's exactly the same story for crypto as well. Node created it's own standard, Web standards emerged, Node has to support both:
https://nodejs.org/docs/latest/api/crypto.html
https://nodejs.org/docs/latest/api/webcrypto.html
Fwiw I think it's good they're not removing the legacy code, but they should probably do a big cleanup major release and lean into the modern standards and remove the old stuff. But there's obviously push back in doing so... and probably stuff you can do in the old modules that you can't do in the new and vice versa.