LaTeX2e provides a
\providecommand but there is no
\provideenvironment which defines an environment only if it (or a macro with the same name) was not defined before. Is there a specific reason why it is missing?
This is the kind of question that is fairly difficult to answer after 20 years. But basically because it was not considered so important. One has to remember that the implementation of 2e was guided by space and speed restriction, So initially we spend an enormous amount of time optimizing the kernel for speed and space.
2e introduced a lot of new code (like NFSS, the package loading mechanism, amsmath etc) but the available main memory was what it was for LaTeX2.09. So compromises had to be made. In fact for quite a long time we even maintained an "auto-load" version of the kernel where a lot of functionality wasn't precompiled into it but only loaded on demand.
Wrong judgement? Perhaps. On the other hand, I personally never felt that