dream_machine.hpp should be something that user sources can include to get things like SDL and GL includes, and structs etc?
Backend specific stuff should probably either be a different include, blocked off w/ preprocessor defines, or whatever.
The main function scaffolding etc is expected to be pretty much the same between all of the C++ backends, so maybe that doesn't need to be a file that exists three times, and the backend-specific stuff can just be injected into it.
Generated structs should probably be put in a separate header that can be included by user sources.
Some odds and ends:
dream_machine.hpp
should be something that user sources can include to get things like SDL and GL includes, and structs etc?