Hola:
Para mi un framework es como un esqueleto de una aplicacion tipica, con los suficientes huecos y libertad de configuracion para que tú puedas hacer la aplicación a tu gusto. En este sentido va más allá de una simple librería. En una librería tienes funciones/clases/métodos que hacen algo concreto y que tú llamas cuando quieras y como quieras. En un framework, tu aplicación entera tiene que ajustarse a una forma de hacer las cosas, de hecho, tu aplicación básicamente tiene que rellenar los "huecos" del framework.
Por ejemplo, una aplicación tipica puede ser una apliación para modificar datos en una base de datos (altas, bajas, etc). Normalmente en estas aplicaciones se pide un usuario y password para dar acceso, se presentan listados de los registros en las bases de datos y formularios para modificar/crear nuevos registros.
Un framework para esta aplicación te daría la aplicación "configurable" de forma que tú puedas decir dónde leer los usuarios y password, que aspecto quieres para las ventanas, qué tablas y campos hay en bases de datos, cuales se pueden editar o no, etc, etc, etc.
Para que un framework sea muy configurable, es casi imprescindible un lenguaje de programación orientado a objetos y la creación de clases e interfaces de determinadas maneras (patrones de diseño). Por ello, como comenta Wilfredo, en un framework suele usarse mucho los patrones de diseño.
Se buena.