2. No product types. You can emulate those, but it's awkward.
3. No recursion over lists. You can emulate this, but it's awkward.
4. It's difficult to write code that is efficient, yet is side-effects free. Good luck with prepending an element to a list.
About emulation, you can emulate closures on Turing machine, though it doesn't make Turing machine a functional language. Lack of the aspect is simply lack of the aspect.
And no, JS doesn't explicitly prevent functional programming (or rather, some aspects of it). It does so implicitly.
> OP isn't trying to be strictly pure and is simply trying to explain the concepts in a manner that those used to imperative development can easily digest.
It's like trying to show how to do OOP in C. It's a different paradigm than the primary of the host language, so any educational aspect will be severly diluted, to the point of being useless to anybody who doesn't already know functional programming.