Not quite a duplicate: this appears to be very similar to the situation described in an existing question. But my question is not "why does it happen", but rather "is there any way to keep using uninterned symbols".
Let's say certain macro generates an expansion that is an invocation of a private, runtime-generated function. This function has an "uninterned" name (or, rather, interned in a non-default obarray). When evaluated directly, this works fine.
However, byte-compiled code using said macro and, in effect, the function, won't work, because after write-to-.elc-and-read-back function name symbol becomes truly uninterned, i.e. is not identical to what I have in my internal obarray.
Is there any way to keep function names out of the default obarray, yet still have them work when invoked from .elc files? (I did make some investigations of Emacs source code and haven't found any, but still ask in case I've missed something obvious.)