Advice on creating a base project to be used across a large number of plants with limited variation

I can't speak to what will work best for you/your environment, but some general technical concerns to be aware of:
As you are aware, inheritable projects will not run scripts. Inherited projects will, but there's another wrinkle there - all gateway event scripts (startup, shutdown, timer, message handler) are one resource. As soon as any change is made in the leaf projects, you're no longer inheriting from the parent, and there's no obvious way to revert. In the short term, we want to make that more clear in the UI; in the long term, we're hoping to do the obvious thing and separate those script types into distinct resources.

In general, I would say to keep as much logic as absolutely possible in project script resources (which do properly inherit) and just accept some duplication of effort in leaf projects re: timer scripts and the like - which should be as simple as possible and immediately call project scripts anyways. That way your development experience can only get better as we introduce better capabilities, instead of an exercise in frustration as things don't inherit properly, or in unexpected ways.