We can proceed with poor separation for the time being; it doesn't stop us from implementing other functionality for the sample games
Users should be able to define their own code; they can derive their own types and implement their own behaviors
Anything inheriting from GameObject can implement an Update() or OnStart() method that executes every loop or on start, etc.
We do not need to worry about users interacting with WAD files in the long run. Human-readable wadfiles right now are just because we lack a graphical editor. Normally, we want the user never to see the WAD file itself; they modify game world state in the graphical editor and load/save it there.