Incremental DOM updates cause layout thrashing which, when comlared to making a few additional passes over a set, is a couple of orders of magnitude more expensive.
The point is, walk/filter the data completely prior to updating the view.
Immutable sets may also 'seem' inefficient but compare-by-reference works a of a lot faster than change propogation with compare-by-deeply-nested-values.
In CompSci terms, multiple passes are still O(n) and the data sets aren't large enough for micro-optimizations to matter. Compared to O(holy shit) of triggering many cascading DOM updates, it's a huge improvement.
'Seems' isn't a good enough metric to justify optimization.