Для чего они нужны это нужно понять самому, тут конкретно и не ответить, а вот примеры привести проще
Представь у тебя приложение с очень разным функционалом, например сайт кинотеатра
Там есть странички фильмов, расписания, новостей, профиль юзера и.т.п
Вот что общего имеют новости к фильмам или юзеру? Да ничего.. поэтому их и пихают в разные модули, в одном модуле компоненты новостей типа блока новости, списка, каких-то плюшек всяких, и.т.д в модуле фильмов аналогично
Так очень удобно иметь структурированный код, со своей областью видимости, это особенно полезно когда у тебя в фильмах и новостях есть два компонента с одинаковым названием но совершенно разной реализацией