I've been using the assembler that came with small-c many years ago, and can be found in my git repo. I used it for many years to patch pac-man roms. (
https://github.com/BleuLlama/bleu-romtools)
I've also created a tool, "genroms" in the same repo to map IHX files out to binary rom files. For example, you say that pacman.6f sits between 0000 and 1fff, pacman.6h sits at 2000-3fff, pacman.B sits at 8000-Afff and so on... then it can load in those rom files (for patching existing roms) or fill with zeroes for making new roms, then the IHX gets applied to that memory space, and the binary rom files saved out.
Here's a ROMS file for generating 2k of program space for use with writing new code for BASIC's "USR()" function implementations...
For this, you'd .org 0xF800, then write your code, and all jumps and labels will be correct. assemble it, and run it through genroms and you'll get a 2kbyte file called "basicusr.rom" that can be placed at 0xF8000.
So to answer your latter question, i think genroms might help. ;)
Sorry if i'm not explaining myself well...
-s