Reducing internal faces generated by extensive curve extrusion? Excuse my title gore.

I've been modeling Gothic architecture:



(reference)

Here's the blend file I've been practicing with. 

So I'm extruding along curves a lot. The complication is the fact that just one curve with a highly detailed bevel object won't work. You'll often need part of your beveling to split off into additional tracery, or to omit it in certain places. So you'll need a bunch of similar curves with different bevel objects.

I end up with a bunch of meshes running perfectly parallel to each other, which prevents the use of the Boolean modifier, the obvious answer to this question, even after dealing with n-gons. I also have lots of hidden faces from tucking curves inside each other to hide my end points. Cleanup and decimation are often necessary to prevent Blender from hanging when you tab into edit mode, actually.

What I'm asking is how I can reduce/eliminate internal geometry, ways to reduce my face count (especially parallel faces), or any other advice you  might have relevant to the end of modeling Gothic architecture. I'm probably doing something wrong or inefficiently.
There are a few things you can do:

1 Reduce curve resolution - Both in your curves and in your section defining objects



2 Eliminate unnecessary vertex - In straight line segments you don't need all that useless points adding additional geometry



3 Turn Handles to Vector - In straight segments change your handles type to Vector, so no additional subdivisions are created without need.



4 Clean up your sections Eliminate segments for parts that are never seen or end up inside the geometry



5 Use Bezier handles in curved parts wherever possible You can then take advantage of dynamically and easily adjustable resolution using the Resolution setting as shown in the first step, for sections curves too.



6 Use a mirror modifier Use a mirror modifier whenever possible. This will not necessarily reduce polygon count, but it will save you time, guarantee symmetry and save cleanup work (you only need to do half)



As for the self intersecting parts, it's probably more trouble than its worth. You may try using Booleans to intersect them, but you will have to destructively convert to mesh, and the resulting intersections (if they can even be made easily) will likely create more geometry and complexity then they solve.