Most people use sub-assemblies for commonly used part-groups like boosters, but they can do so much more. The trick is to place an arbitrary and unneeded part as the first part when building a module intended to be used as a sub-assembly(it doesn't have to be a probe core, it can be any root part). Once the module is complete, pick up the piece you intend to attach to whatever ship you are building later, and drag the whole thing to the sub-assembly window.
If you create two sub-assemblies of similar weight (e.g. 5 ton) and place them opposite each other on the rocket, they will normally not balance each other exactly. However in general if the weight and size match each other, the torque caused by the difference can be counteracted by reaction wheels, command pods, RCS (not recommended since it depletes) and vectored thrust.
- Note: If you use realistic aerodynamics such as FAR, you may want to use identical fairings around the parts since the shape will affect torque severely in atmosphere.
As you can see, this allows for greater diversity while building your main vessel without having to rebuild each item every time. Creating a variety of modules at different weights should allow you to build ships for just about any occasion at your whim. You can also use sub-assemblies to save entire stages to make the whole process even faster. Create a launch stage using a test payload of a given weight, and try to get into orbit. If it works, you can save that launch stage as a ##-ton launch stage. Eventually, you may be able to build all of your ships almost entirely through sub-assemblies.
If you plan on being able to attach modules in a radial fashion, weight balance will be very important. You can attach other things to your module to help change it's weight. Using fuel as ballast is generally the best way to go, as you can usually use the fuel. If you do use some sort of ballast to get your module's weight exact, be sure to also include a decoupler so you can separate your module from the ballast.