I'm not saying that we should use another nested loop (oh no!), but I don't thing that sleeping again after each new change is a good idea (it could really delay a lot the call back if change doesn't stop to come). 

For me just waiting once more and popping change back again should be fine enough (see my code example https://github.com/guard/listen/pull/203#issuecomment-37158550).

Your approach seems also too complicated to me and add too many new logic IMHO (new_changes, _smoosh_changes)