On the first point, sounds like you need the equivalent of the 'PHASE'
directive from Microsoft M80 (and others). "ORG" is usually taken to mean
"..load AND run at this address" while "PHASE" means "..load in the natural
position relative to the last effective origin, but resolve references as if
it were running at the specific argument to PHASE". In other words, it's
specifically designed for code that will be relocated at runtime.
(FYI: The ALDS version of M80 is very handy for producing 6502 code, if you
don't mind cross-assembling under CP/M. It has features that the Apple world
didn't catch up with until OMF capable tools existed. And even then, I'm not
sure that the later 16-bit assemblers had all the bells and whistles)
On the second point: Extern arithmetic of that type is expected as base
functionality in a linker. I'm surprised it cannot handle that.