Right. For "regular" linking of C and asm, there's some info in the Friendly Manual under "mixed language programming".
http://www.drpaulcarter.com/~pcasm covers the subject - for 32-bit code, but the principles are the same.
Getting "flat binary" out of C probably depends on the linker. Another option might be to provide your own loader for MZ format - in your bootsector, or more likely in a "second stage loader". Not too difficult...
Another issue that might byte ya - if your C compiler is capable of C++ (even if you're writing plain C), it'll "decorate" (mangle) your function names. This can be avoided by something like 'extern "C" myfunc' - exact syntax may vary. C prepends an underscore to anything external, too, unless you're using ELF. ("nasm --prefix_ ..." may help with this, or "%define myfunc _myfunc"...
What you're proposing isn't simple, Alex, so don't be too surprised if you have to struggle with it.
Good Luck,
Frank