jules wrote:people will have written code that just has "juce::" everywhere, which would need changing
You can inject types using typedef or using and it'll just work (I'm doing this all the time). Anyway, it's a good pratice anyway to use namespace, so the later you wait for using them, the harder it'll be.
I know you don't put any code for "BEGIN_JUCE_NAMESPACE" in all files.
Now, depending on how you intend to document the modules:
1) A whole module is in its own namespace, in that case, you can stick a BEGIN_JUCE_NAMESPACE in the main header file, and only let Doxygen parse this file.
2) You want Doxygen to see each file separately, and in that case, you might have to perform "search & replace" in all files for some regexp "^class(.*)$" and replace by "BEGIN_JUCE_NAMESPACE\nclass \1\n". Using sed in multiline mode can be straightforward for this task.