Non-Clojure user here (but with just enough Lisp experience to make a fool of themselves)...
> When Clojure evaluates the symbol router [(an argument)] here, it goes through almost the exact same process as it did for the symbol +, but without checking if it’s a special form. It looks for the var in the current namespace that maps to the symbol router, dereferences it, _and saves the function object it retrieves as the first argument before evaluating the second argument_, and then calling the function that run-jetty evaluated to.
Why does it save the resolved function object, which is an argument at that scope? That sounds counter-productive to the reloadable functionality.
Is it a performance optimization?
If anything, it demonstrates that reloadable code is inherently at odds with performance.