Exactly. The proto-<backend>.h is logically local to the backend; the
external.h needs only know the <backend>_initialize() function. If a
backend were so compact to fit into a single file, all the functions could
be declared static.
Elaborating from Hallvard's idea, I think we could safely speculate on the
backend's availability of a function <backend>_initialize() (this could be
a coding style requirement) and define/use it locally even without
including any backend-specific header. Then, the function's name and so
could be built from a macro. But this is secondary, as it may obfuscate
the code.