I think I remember a Bleacher Report engineer talking about this on an Elixir podcast. They use it to power their push notifications and pride themselves in being consistently the fastest among their competitors.
Tinfoil Security! All of our release engineering is orchestrated through a small Phoenix app that calls out to docker images to perform various types of deployments (Heroku, EC2, ECS, building docker images, etc).
I'll probably do a write-up on it at some point, because it is now trivial for anyone on the team to deploy any of our services to any environment (or a new one!), and to integrate new services into the platform.
We do at TalkJS (https://talkjs.com). It's a pluggable user-to-user messaging service, and the concurrency that Phoenix and notably Elixir offer have been really helpful in keeping our infrastructure simple.
Postmates [0] for a variety of internal services. It's been rock solid and easy to ramp new team members on to. We do have a good number of in-house erlang folk, too.
The immutable nature helps with 1) reasoning locally (you can always understand exactly what happens in a function by reading the function itself) and 2) debugging. Additionally, dialyzer provides a very nice (optional) typing system for erlang / Elixir.
And with the new deprecation in 1.4 of bare words, a disambiguation goes away where when looking at a function you sometimes had to go "is this a variable or a function". Now functions with 0 args have parens, always.
I've found the locality of everything in the function that you mentioned helps IMMENSELY in refactoring. Just give a function a namespace and call it, and then figure out where it actually belongs later as you figure out your implementation.