Большей частью (модульные) фреймворки и пишутся для реализации функций контроллеров, связи вида и модели. Слово «библиотека» тут не совсем уместно. Библиотеку вызывают из своего кода, а контроллер и есть свой код прежде всего. Вы можете в каком-нибудь users.php написать код получения списка юзеров из Doctrine и его рендеринг в Twig и это будет типичный контроллер, но когда придёте к концепции фронт-контроллера и роутинга, чтобы соблюдать DRY хотя бы, то получите типичный велосипедный фреймворк.