In a recent discussion regarding the damage model, I recall hitech mentioning that one reason that it's done with the way it is is to remove randomness: People would just get mad and complain if the game randomly decides a round cut your control lines. Modeling such components would certainly be a complex process, as well.
However as a result of the "all or nothing" model, there's a bias favoring cannon-armed planes to a degree beyond historical performance. Simply put, machine guns could inflict fatal damage just by shredding an airfoil beyond its ability to sustain lift, or by severing control line, fuel lines, and various other internal parts.
The game does already track "damage points" for each component to determine when it should fail. What if the % to which, say, a wing is damaged before it pops off directly translates into a given loss of lift. In other words, you rake an enemy's wing and deal 15% damage. That part of the wing (let's say it was the outer half) loses 15% of the amount of lift it generates.
The same can be applied to control surfaces and flaps as well. If the aileron takes 50% damage, it's only 50% as effective as it should be.
Wings, wingtips, vertical stab, horizontal stab, rudder, ailerons, flaps and elevators would all be affected in this manner.
This will help alleviate the exaggerated advantage of cannon without introducing a random element into the damage model, or needing to track dozens of additional components in the flight model.