There are two approaches you can take.
The ring/ring-devel library includes middleware that reloads modified files (ring.middleware.reload), and this is included by default with the Lein-Ring plugin.
The second approach is to run the server from within the REPL, and to have functions to reload modified files and restart the server. There are libraries like Component and Jig that provide a framework for this style of development.
The trend seems to be toward the second, though it requires a little more work than the first option.