I just looked at the source code and found following
(-add-watch [this key f]
(set! (.-watches this) (assoc watches key f))
this)
source
So I think it depends on scope. In my case the local-state
atom is within a closure, thus once it removed, all its watchers also should be removed automatically. However, for atoms which are in global scope, watchers should be removed by hand if they are not need anymore.