Además de gen-class, proxy y reify, tenemos defrecord y deftype. Estas dos últimas opciones deberían ser sus primeras opciones para la creación de clases java nombradas (y en el caso de defrecord, su primera elección para cualquier clase de estructura con componentes nombrados).
La datatypes page on clojure.org es una buena referencia sobre este tema . Defrecord, deftype y reify son más nuevos que gen-class y proxy, y se introdujeron en la versión 1.2 (creo, posiblemente 1.1). Defrecord y deftype crean clases que se ajustan a las interfaces, pero no permiten la herencia. Si necesita herencia, gen-class (y proxy para clases anónimas) sigue siendo su única opción.
Defrecord y deftype difieren en lo que se le da de forma gratuita. Defrecord crea automáticamente una clase que se ajusta a IPersistentMap e ISeq. Deftype, por otro lado, le da más control sobre su clase, incluso permitiendo campos mutables (no permitido en defrecord). En general, deftype está destinado a la implementación de bajo nivel de las estructuras de datos, mientras que defrecord está destinado a la mayoría del uso diario.