Yes, we do this. Jobs are classes that implement an interface with a Run method. Jobs just take an id as a parameter and 1st thing job does is load the real parameters from our own job table via the job id passed in.
Hangfire invokes the method on the required schedule via reflection - you can see your assembly qualified class names and serialised parameters in the hangfire tables.
How does the Hangfire server application gain access to these classes. Are they compiled in the same project (so every time you have a new job you need to redeploy the entire application). Something else?