Ведь в js есть модульность и все необходимое мы импортируем явно, при импорте мы даем уникальное имя всему что импортировалось.
И тут вы подключаете AwesomeModule к котором тоже кто-то написал MyCoolClass с кучей IMyBestFrendDependancy. Вы хватаетесь за голову, т.к. пакет делает нужное, но использовать его - значит переписать 95% кода чтобы имена не пересекались. В своём коде или в пакете... головняк же.
Вот тут-то и приходят на помощь namespace. Позволяют существовать чему-угодно с одними и теми же именами.
Модуль - супер-класс, который содержит некоторые common-классы используемые только внутри этого модуля, экспортирует только то что вы укажете + некоторые другие мелочи в архитектуре angular (регистрация интерцеепторов, фабрики и т.д.).
Как и первое так и второе можно использовать для написания модульной архитектуры. Например подключаемых плагинов которые будут добавлять динамически новое в уже существующее приложение, используя ташние ресурсы либо добавляя свои.