The fact that shell extensions are source code compatible back to 1995 and binary compatible back to 2004 is probably the main reason...
And back then, there wasn't really a strict API for extensions, so they just injected things into random places, and Microsoft, 28 years later, is still supporting that.