I believe that as of at least 10.2 M030, some of the relevant workflow-notification-related calls are still hardcoded and non-overridable, making them very difficult to get to through standard service property modifications, class/method extensions/overrides, etc.
As you said, I think you can still get what you want by:
Creating the necessary templates along with their required property additions and new classes, and
Customizing the OOTB templates (e.g. General_<locale>.html) so that they invoke processSubTemplate against your newly created custom templates.
Your custom template processor class should have access to the related wfobjects/business objects/etc, so it would then be up to you as to how your new class would implement the business logic you need. Your invocation against your own template processor doesn't necessarily require that you write anything to the OutputStream.
All that being said, it looks like the template processor stuff is being phased out anyways. Its documentation has definitely become scarce.