Clojure does not rebind the reference, it just changes it to point to something else. So it does not suffer from what you describe. Previous references will see the new thing as you'd hope.
So def on an existing binding does assignment. That's what is meant by "re-binding".