I'm glad he acknowledged that library functions is the majority implementation of "bottom up design". In that case extracting primitive api functions & layers composed of these functions is effective at reusing logic & creating appropriate levels of abstraction.
That being said, many frameworks do not offer these layers of abstraction so create a sort of "complexity lock in"...where one has to use the entire framework in order to use a few useful parts of the framework. I find this complexity lock in to be unfortunate as it not only couples the programmer to the entire framework, even if the majority of the framework is not useful. It also creates noise in the conversation, making it more difficult to search for the appropriate solutions at the appropriate level of abstraction.
There is a cost to integrating other libraries into the framework.
Frameworks also tend to become an institution in search of increasing market share. This means there are changes done to the framework. Some of these changes are breaking changes that don't necessarily improve the core development experience in meaningful ways.