технически, тут стоит несколько задач: максимально облегчить реюз кода в других проектах и переложить на фреймворк управление состояниями компонентов, исключениями и т.п. Если бы там не было исключений, то фреймворк бы не смог ими управлять, а если не будет классов\наследования, то осложнится управление компонентами. Для коммерческой разработки это, действительно, скорее избыточно, ну и обычно не делается из-за проблем с лицензиями\авторством и т.п.