I'm considering having some way of easily making functions concurrent, however this is limited by the fact that JavaScript doesn't have memory-sharing threads; it only has workers that can pass messages to each other. So any boundary data has to be serializable, and the benefit of processing it in parallel has to be greater than the cost of serializing and deserializing it. I've only really encountered one situation in my career where that trade-off made sense.
With that said, I'm going to probably try out something along the lines of a "concurrent" keyword that could be put on a pure function to automatically spin it out when it's called
Have you looked at Fortress at all? It was designed on just this premise, and came to some interesting conclusions before being abandoned. For example, where the natural data structure for Lisp is the list, the natural data structure for Fortress is the tree.
(Discussed here: https://news.ycombinator.com/item?id=814632)
A parallel iterator for map (or any other pure function batch operation) allows for an entire world of possibilities.