On the coding side of things, it turns out I should have done a little more research about serialization in C#. I threw away my xml/reflection class and decided to just use the XML serialization that C# comes with. As for how to handle separating data from the engine classes - I just created an EmitterConfig class, and then derived subclasses for explosion, weapon and engine emitter configurations. This makes it easier to create specific emitter types, since you only have to specify relevant values and the rest is filled in automatically. Each class has a Construct() method that takes in some game state data, and passes you back the engine object with all the configuration data filled in. If I want another type of emitter it might become a pain in the ass, but besides the occasional special case, particles usually come in the form of bullets, explosions or engine flames.
Next up is streamlining the way the XML is loaded. I want to have specific folders that weapon data, ship data, etc belong in, and then these are all loaded into a hash table with names as the key. Then all a ship needs to know is the name of the weapon it wants, and it can grab it easily.
Finally I said I was going to do overlays and menu's this week - that may or may not happen depending on the next two days.