Jack,
Please note: Because I feel very strongly about the safety
that type checking brings to the table, there are are
currently 12 source code files: one *.ino file, one *.h file,
and ten *.cpp files. One of those files carries a fairly stern
warning in a comment at the top about making changes to it, as
messing that file up may well ripple through the rest of the
code, especially the filters that we've added.
Have you considered directly provisioning for this by making an
"empty" extensions header/code file, perhaps named MyExtensions.h
& MyExtensions.cpp, and including these files in the framework.?
I'd go so far as to include a MyExtensionsSetup() function called
from setup(), and a MyExtensions() function called from the loop().
Anyway, that is how I'd start with an adaptation of your (or anyone
else's) codebase.
Daniel