Подумайте про модуль як про місце для передачі ряду інших речей, таких як директиви, служби, константи тощо. Модулі можна вводити в інші модулі, що забезпечує високий рівень повторного використання.
Коли ви пишете кутовий додаток, у вас є модуль верхнього рівня, який є вашим кодом програми (без шаблонів).
Послуги - це головним чином спосіб спілкування між контролерами, але ви можете вводити одну службу в іншу. Служби часто використовуються як спосіб потрапляння до ваших сховищ даних, і люди зможуть зафіксувати кутові API, наприклад, ngResource. Ця методика корисна, оскільки робить тестування (особливо глузуючий) досить простим. Ви можете мати послуги для виконання таких речей, як аутентифікація, ведення журналів тощо.
Директиви використовуються для створення віджетів або загортання існуючих речей, таких як плагіни jquery. Обгортання існуючих плагінів може бути проблемою, і причиною цього ви будете встановити двостороння прив'язка даних між плагінами та кутовими. Якщо вам не потрібно двостороннє прив'язування даних, тоді їх не потрібно обертати.
Директива також є місцем для маніпуляцій з DOM, лову DOM-подій тощо. Ви не повинні робити речі, пов'язані з DOM, у контролерах чи службах. Створення директив може стати досить складним. ІМХО, я рекомендую спершу подивитися на API, що може робити те, що ви шукаєте, АБО попросіть консультацію у групи Google від Angular.