Was just about to say that we have seen a couple places with similar behavior and similar results in BigCouch. Specifically couch_os_process pids can have this effect. The article is missing the underlying reason but the HN comment is close enough. Simple fix is to call erlang:garbage_collect() when processes are returned. I think there might be a few other places we do similar things but nothing as significant as a couchjs processes.
Also, its possible that this might not be much of an issue for CouchDB. BigCouch deployments can run in the hundreds to a thousand or so couchjs processes so it was a bit more of an issue with those pids stealing RAM when they went idle. If the total number is smaller and they're reused quite quickly then this issue shouldn't manifest, or at least not as drastically.