The blog post http://stevelosh.com/blog/2012/07/caves-of-clojure-02/ describes a design that I think would work well here. Game UIs are a stack (vector) of records. In that blog post they do not implement a protocol, instead a draw-ui multimethod dispatches on the kind of UI (main screen, instructions, etc.). However you can modify this as you please. The design uses records to model state.
Remember it is not always necessary to reach for a reference type (var, atom, ref, agent) to model state in Clojure.