Couldn't this be done like rxvt-unicode (or the current st fontarray patch)? You specify a list of fonts, and the program iterates on it until it finds one that provide the required character. With a very basic cache, it's pretty simple and doesn't causes problems.
Of course, the range:font mapping is more granular, but I find it a little bit more complex to configure than this type of fallback.