You have basically two choices:

pass source code (s-expressions stored as clojure data)

pass jar files and load them on the other side.

for the first option you save the source at the time the function is compiles (almost always when it is defined) and then pass the same source expression to the other computer and let it compile the same thing. so first you might make a vector of expressions:

(domain-functions '[(defn foo [x] x) (defn bar [y] (inc y)]

then you can store this into a database and each client can pass it to read and then they will all have the same functions.

The second option depends on the fact that each time you define a function it produces a class file in the /target directory and then loads it. You can then syncronize this directory and load them on the other side. This approach is of course completely crazy, though people do crazy stuff around here. I recommend the first approach

And as a personal note:

I'm doing this now with datomic, and I have adopted the practice of putting the git-hash into the function name using a macro so I know absolutly for certain that when I call a function, I'm getting the same function I see in the editor. This brings peace of mind when running many instances that all pull from the same DB.