I imagine compiler directives would be needed to make the code work. I know that shared libraries require you to explicitly export everything except the main, init, and termination entry points. This has to be done from the makefile or in a export control file pointed to from the makefile (in MPW, at least. CodeWarrior and others might be different).
What kind of FAT patch? I can imagine two kinds of them: one that chooses whether to go ppc or 68k at boot, and one that chooses its mode at runtime depending one what the mode of the caller is.
If you want the boot time one, I believe the 'cput' gestalt will indicate what model of processor is in the machine. The value returned will be less than 0x100 if the cpu is 68k, and >= 0x100 if it is ppc.
If you want the runtime one, I would suggest building the UPP in the patching code, using the function pointers from the 68k and ppc versions of it. It's recommended that you select the data pack mode to use 68k conventions for both of the versions of the routines.
I suppose you could also go the FAT code resource route, though I don't know how to actually do that.