Do you think this is enough for saving that ton of headaches? :) If it is not, please don't hesitate to give examples of problems that may arise, and I will try to do something about them.
Will Submarine allow DAO-style classes to be defined for the created tables? These classes will have to defined every time the program is compiled/used, while the database tables only have to be created when a new DB is initialized. Also, the problem with the foreign keys to non-existant tables seems a lot more manageable to me if definition and creation are two different commands. But I haven't thought deeply about any of this, so just do what seems workable to you.
Marijn