Coming a little late to this party AND I know the OP is specifically asking to not "pontificate" as they already know about the STL, however ...
There is an old Dr. Dobbs interview with Alex Stepanov, a pioneer in generic programming and a primary contributor to the STL. It is very instructive a several ways, especially to address the question of why more standard OO techniques are not used in the STL. One paragraph stands out:
Even now C++ inheritance is not of much use for generic programming. Let's discuss why. Many people have attempted to use inheritance to implement data structures and container classes. As we know now, there were few if any successful attempts. C++ inheritance, and the programming style associated with it are dramatically limited. It is impossible to implement a design which includes as trivial a thing as equality using it. If you start with a base class X at the root of your hierarchy and define a virtual equality operator on this class which takes an argument of the type X, then derive class Y from class X. What is the interface of the equality? It has equality which compares Y with X. Using animals as an example (OO people love animals), define mammal and derive giraffe from mammal. Then define a member function mate, where animal mates with animal and returns an animal. Then you derive giraffe from animal and, of course, it has a function mate where giraffe mates with animal and returns an animal. It's definitely not what you want. While mating may not be very important for C++ programmers, equality is. I do not know a single algorithm where equality of some kind is not used.
For those preferring a Java answer to this same conundrum, Josh Bloch takes pains to make the same points in Effective Java, Item 8: Obey the general contact when overriding.
It's a good chapter, with a nice example about trying to preserve the equals contract while at the same time extending a simple Point class with and added color: a ColorPoint class. He goes on to demonstrate that there is a fundamental limitation of OOP: there is no way to extend an instantiable class AND add a value component while preserving the equals contract.
Granted, the Bloch statement is more succinctly stated, but they both (correctly) draw the same conclusions. The main difference is that Java is (was) a "pure OO" language - everything must reside in a class, even those things such as algorithms, which are not naturally objects.
And I think Bloch may be sensitive to this problem because he has seen it fail spectacularly in the Java library: Stack inheriting from Vector is one example of a notable design problem in Java.
Slightly later in the interview, Stepanov goes on to say:
I had participated in several discussions early on at Bell Labs about designing templates and argued rather violently with Bjarne that he should make C++ templates as close to Ada generics as possible. I think that I argued so violently that he decided against that. I realized the importance of having template functions in C++ and not just template classes, as some people believed. I thought, however, that template functions should work like Ada generics, that is, that they should be explicitly instantiated. Bjarne did not listen to me and he designed a template function mechanism where templates are instantiated implicitly using an overloading mechanism. This particular technique became crucial for my work because I discovered that it allowed me to do many things that were not possible in Ada. I view this particular design by Bjarne as a marvelous piece of work and I'm very happy that he didn't follow my advice.