From your comments, I suspect this may be a source of confusion as well:
When you have something like (defn ^{:doc "Increments"} a-fn [x] (+ x 1)) the metadata is attached to the symbol at read time. However, during the compilation process, the metadata on the symbol is transferred to the Var that holds the function created. If you want to access this metadata you have to access the Var itself, not the function.
user=> (meta a-fn)
nil
user=> (meta #'a-fn)
{:ns #<Namespace user>, :name a-fn, :file "NO_SOURCE_PATH", :column 1, :line 1, :arglists ([x]), :doc "Increments"}
The #' syntax is shorthand for accessing the Var. You can see this process in the following code:
(let [fn-def-sym (with-meta 'b-fn {:here true})
fn-def-code `(defn ~fn-def-sym [x#] (+ x# 1))]
(eval fn-def-code))
#'user/b-fn
user=> (b-fn 2)
3
user=> (meta b-fn)
nil
user=> (meta #'b-fn)
{:ns #<Namespace user>, :name b-fn, :file "NO_SOURCE_PATH", :here true, :column 1, :line 1, :arglists ([x__769__auto__])}
The important thing here is that the definition code is manually built up using a symbol that has metadata given manually, which is then transferred to a Var when the code is evaluated.