1) The Point of using immutable data structures is that one doesn't have to worry about when it's safe to mutate and when a copy is needed. You only ever pass around immutable data.
Since Javascript does not have data structures that facilitate immutability, this is a major pain point. Even if you're not writing code in an FP style, you should still be avoiding mutability as much as possible.
2) Tail call elimination is supported in plenty of languages, and is pretty much essential for proper FP. Mind you it's still useful in imperative code as well, and most C/C++ compilers will do the optimization when provably safe.
3) V8 garbage collection is terrible. Creating lots of small object copies has a massive overhead (Compared with, say, the JVM, which has virtually no overhead)