reifyで作成したオブジェクトはclojure.lang.IObjを実装しているのでwith-metaでメタ情報を付与できますが、proxyで作成したオブジェクトはそうはいきません。
(def v (proxy [Object] []
(toString [] (str :abc))))
(with-meta v {:A 111})
java.lang.ClassCastException: user.proxy$java.lang.Object$ff19274a cannot be cast to clojure.lang.IObj
以下のようにclojure.lang.IObjのwithMetaとmetaを実装すればwith-metaでproxyオブジェクトにもメタ情報を付与できます。
(def v (proxy [Object clojure.lang.IObj] []
(toString [] (str :abc))
(withMeta [m] (update-proxy this {"meta" (fn [this] m)}))
(meta [] nil)))
(with-meta v {:A 111})
(meta v)
ただし、通常のwith-metaとは違ってメタ情報はmutableに変更されます。