First, it does not seem like Leiningen supports a module hierarchy like Maven does. The checkouts are the next closest thing it has. It should be sufficient though to develop a modular application in Clojure though.
For the project structure, I would have an API project, a "core" project, the plugins themselves, and a separate packaging project. The core and the plugins should only depend on the API. Which build tool you use to create the packaging project is up to you. Gradle would probably be more effective at handling the packaging, however having the "checkout" functionality Leiningen offers could make development of the system as a whole easier.
I would take a look at the code for Leiningen and Noir to figure out how to effectively handle this.
For dynamically loading the plugins, I would start with looking how Noir handles it in two of their files:
https://github.com/technomancy/leiningen/blob/master/leiningen-core/src/leiningen/core/classpath.clj
https://github.com/technomancy/leiningen/blob/master/leiningen-core/src/leiningen/core/classpath.clj
http://stackoverflow.com/questions/10272559/how-best-to-structure-and-build-clojure-apps-with-plugins