Using anything else than page 3F for the loader means that you have to at least temporarily erase the reset vector, therefore if the board looses power just at this time (Murphy), it does not boot anymore (and you can only rescue it via BDM).
About your question of how to use sprintf with far pointers, search in this forum, I think this came up a couple of times. Basically possible but __far pointers are not especially efficient for the HC12/S12. So check what you really need, and avoid to use __far everywhere.
Also putting _LCMP into a paged bank can cause troubles if anything outside of this page is using _LCMP. The _LCMP runtime routine is called with a JSR, so calls from another page will not reach it. If the complete application is just on a single page, say 0x36, then PPAGE is always just set right anyway. But be careful not to place any code in the same application anywhere else.
What you should think of, if you did not do it already, is to create the loader in its own completely separate ELF application. This way it gets its own copy of the runtime support and you can place it all together into its own completely separate area.
Daniel