I mean, `jq` does in-place mutations when the values being mutated have just one reference. With a lot of care one can really make that shine. `jq` has been doing this since day 1, years ago, though it's had a few bugs in `reduce` that had to get fixed.
I'm sorry, I think I missed your point. The paper is focused on a language that can do fully in-place FP for a broad class of programs, with the checks done at compile-time.
I believe jq code is interpreted, so while it might be able to mutate some values in place, that doesn't mean the interpreter wouldn't allocate and release memory.