Quello che vuoi veramente è uno dei tipi di riferimento mutabili del clojure, per il tuo esempio, userei un atomo, come questo:
(def ticks (atom 0))
(defn ++ticks []
(swap! ticks inc))
e per ottenere il valore, @ticks
link
Non usare una def per questo, in effetti l'unico motivo per cui è possibile ridefinire è quello di abilitare lo sviluppo al repl o al hot code che ricarica.
La soluzione di cui sopra è idiomatica in quanto il clojure ha una filosofia di massima immutabilità e mutabilità controllata. Un atomo è la forma più semplice di mutabilità controllata fornita dal clojure. Questa soluzione è pronta per essere utilizzata da più thread ed è appropriata per essere utilizzata da un singolo thread, senza che tu debba pensarci troppo. Questo è il modo clojure.