Forget what you have heard about functional programming. Fancy words, weird ideas, bad tooling. Barf. Elm is about:
No runtime errors in practice. No null. No undefined is not a function.
Friendly error messages that help you add features more quickly.
Well-architected code that stays well-architected as your app grows. Automatically enforced semantic versioning for all Elm packages.
No combination of JS libraries can ever give you this, yet it is all free and easy in Elm. Now these nice things are only possible because Elm builds upon 40+ years of work on typed functional languages. So Elm is a functional language because the practical benefits are worth the couple hours you'll spend reading this guide.