The same thing that happened to Firefox happened to Babel [1]. Babel's plugin API exposes the internal structures and APIs to plugins, which means they're unrestricted in what they can do, but it also means that it's very hard to change things in the codebase because you might accidentally break plugins that rely on the previous behavior / APIs. This is one of the primary motivations behind Rome [2].
[0] https://www.youtube.com/watch?time_continue=4542&v=6D6idUjkv...
[2] https://romefrontend.dev/blog/2020/08/08/introducing-rome.ht...