The language would have to change for you to be able to code a loop. And that would have all sorts of consequences: in Erlang, preemption happens at function calls and no loops means a bounded time until you make a function call or terminate, with loops, that changes and preemption gets more difficult.
I didn't think this was true. The secret sauce was that Erlang preempted on reduction counts, so as a result nothing has any responsibility to yield itself.
edit: ah, literally no difference between the two in the implementation.
If you take out enough simplifying implementation details, you no longer have a powerful system built from simple parts.
I find it much easier to reason about loops than to reason about recursion. Likewise I find it much easier to write loops than to write recursive functions.
It probably comes down to experience mainly. I spent some time with functional languages, but I have spent far far far more time writing imperative procedural code.
Instead, there's loop/recur where the recur call won't compile except in tail position.