I think there should be a way to turn off the automatic font changing. For example, when I type certain characters (such as 「 and 」) and the font is set to Fairfax HD with a font size of 12pt, it changes to a NSimSun (at least it would've if I hadn't went into the specific setting and changed the font for the "Asian" character set to Fairfax HD) at a size of 10.5pt because 「 and 」 are part of the "Asian" character set, while the other characters I was using (characters in the UCSUR, which are assigned to private use characters) aren't. This is very annoying, so I think that there should be a way to turn this feature off.
Font fall back/substitution is controlled by the os. Additionally, if you use a font heavy with PUA, the os font fallback will be chaotic. Unicode PUA codepoints are meaningless except when explicitly applied from the font containing them--there is no effective way to control that, locale or language of the glyph or as assigned to word is not sufficient. Use a charmap utility, like BableMap on Windows, to explore the coverage of the font. LibreOffice's Special Character Dialog also works, but the collapsed character charts are a bit annoying to work with when looking at the PUA glyph coverage, or a fonts actual BMP/SMP glyphs. Something not in the font gets os controlled fallback.