Elm является более высокоуровневым языком по сравнению с JS и предоставляет больше гарантий при решении более узкого класса задач (UI в браузере).
На JS можно сделать больше разнообразных программ. Например, это класс программ, содержащие Runtime ошибки и класс программ, делающих что-то за пределами задачи "UI в браузере". Например, сервер на node.js.
Elm не даёт нам написать программы из этих классов.
Т.е. Elm предлагает некоторую модель разработки того, что нужно, при это запрещая разработку того, что не нужно и вредно.
Причем проверка запретов происходит на стадии компиляции - до того как программа попадёт к пользователю.
Это прекрасно с точки планирования времени:
1. Для разработчика: если задача решена (скомпилировалось - значит уже целый класс ошибок устранён) - к ней уже можно не возвращаться - можно спокойно думать о другом. Или спать :-)
2. Для менеджера: если таск закрыт, значит он закрыт и крайне маловероятно, что возникнет куча багов по этой задаче, которые сожрут ещё неизвестное количество времени.