Earlier quoted context omitted.
Sure, so once a week or so you need to restart the process if you end up like that. What I've seen people do, is restart the process after each change like you typically do in other languages, rather than evaluating the current form...
The thing that happens to me is that I'll get something working in the REPL, then try to deploy it and it breaks—because unbeknownst to me, I had gotten my REPL into some state where everything was working, but a cold start doesn't look the same. Is this a skill issue? Absolutely. Do I still restart the REPL frequently (not after every def, but often) just to make sure I'm working with the same environment my program…
I have a this little function for clearing the current namespace that I call every time I rename any var inside a namespace:
(defn clear-ns []
(map #(ns-unmap *ns* %) (keys (ns-interns *ns*))))
Not a perfect solution, but personally I also don't know a better solution that doesn't involve loosing out on other (non-negotiable for me) benefits.