A well aged wine from 2013 
If I recall correctly at that time om was doing root -> children re-rendering passing all the props explicitly (like my second example in the blog post). So let’s say you changed something under the “z” key in the app db
{:a {...} :b {...} :c {:x {...}, :y {...}, z: {..}}
and you need to re-render the application state again.
Using om and persistent ds at that time meant all the components requiring data on other paths (a, b, x, y) didn’t need to re-render, but all the parents (root, "c:, “z”) did. It wasn’t trivial to implement the same in react.
At lot has changed since then (Pure Components, memoized functions…). And yeah, like you say: the reference equality s the same if you do copy on write js or assoc in cljs, but if think you can rely on clojure equality and create new objects (e.g. into {}
you’ll hit some problems). And ultimately doing root -> children re-render for every state change proved to be too slow for om (despite the cart rocket metaphor). re-frame subscriptions solved the problem of targeted updates very nicely.