Я собираюсь дать слегка языком в щеку ответ:
Если бы я начал эту работу, я бы начал с написания 3-5 веб-приложений без поддержки фреймворка. Выясните, что всегда одинаково, и учтите это. Рефакторинг приложений, чтобы использовать его.
Затем напишите еще несколько веб-приложений, используя ваш фреймворк. Наблюдайте за тем, что вы делаете снова и снова. Разберитесь с этим и добавьте его в свои рамки. Выполните рефакторинг приложений, чтобы убедиться, что ваша инфраструктура работает.
Повторите это и продолжайте добавлять функции, пока структура не станет настолько большой, сложной и громоздкой, что вы просто захотите начать все заново. Тогда начните сначала.
Теперь серьезно, вы не собираетесь изучать, как работают веб-фреймворки, написав фреймворк с нуля. Вы можете проектировать фреймворки только тогда, когда у вас есть достаточно глубокие познания в проблемной области.
Если вы хотите узнать о том, что заставляет фреймворки работать, сделайте пару реальных проектов на разных фреймворках / языках. Посмотрите, что работает, почувствуйте, что нет. Изучите компромисс дизайна, который сделали разработчики фреймворка. Попробуйте рельсы, JSF, побережье, лифт, compojure, калитка, ... все что угодно.
Веселись и получай опыт.