I find the reason I lost interest in DCS: Black Shark and will likely lose interest in LC:FC2 in the near/mid future is twofold: one, the difficulty of creating of dynamic, interesting missions; and two, the lack of feeling that anything I'm doing in the mission matters outside of that mission (since it doesn't).
This is a big issue in terms of realism/immersion: failure to destroy all your assigned targets shouldn't mean "mission failed, try again". That completely destroys any sense of continuity. I think a big part of warfare is that things don't always go as planned, and for a simulator to not have an option to back out of an engagement really takes away from the "sim" part of it. A real pilot can take damage or lose a wingman and decide to abort the mission and save his plane (and himself). That in itself is a dramatic moment and a test of airmanship: who doesn't enjoy the thrill of nursing a damaged ship back to the airfield and making a harrowing landing with one engine, no flaps and stuck landing gear? But then you just get a "mission failed, try again". Bah! In real life, the theatre commanders will deal with the setback and re-task the mission (and you'll get an award for your efforts!). This allows for scenarios where you go to hit a target that's expected to be lightly defended, but the intel was bad and you're lucky to make it out alive. Choosing when not to fight is as important as being able to fight effectively.
That's just my opinion, of course. Others may disagree. If you do accept that premise though, then it's clear you need some level of responsiveness to events so you can fail a mission and have things continue from there, rather than just winding the clock back, or pretending you completed the mission, or similar. ED did this a bit with their campaign system, allowing you to move back and forth between different sets of missions to give the impression of a moving front. But if often breaks the illusion because things you destroyed in one mission suddenly reappear the next since they weren't actually part of your mission, for example.
Of course, as has been mentioned: you're now trying to create both a high-fidelity flight/combat simulator, and also a strategy game. This is probably not very feasible for most developers. So my suggestion is to decouple them: devise a protocol for allowing the sim to communicate with the "mission controller" and a separate program can be responsible for making higher-level decisions. This could be done post-mission (to generate a new mission, or alter an existing "template" mission to reflect changes). IL-2 did this; I recall some mod or other that improved the dynamic campaign generator by replacing the mission creator. More ideally, it could be done in real-time: the control program would receive events (and query for information), make a decision about what to do next, and then issue commands to units within the sim.
It would be some effort to create such a protocol, of course. I think much of this effort would be required anyway, in order to create a powerful and flexible mission editor that can react to events. But exposing this functionality to an external utility would allow the simulation developers to focus on the simulation and providing an API for controlling AI units. Most of the functionality that would exposed would need to exist within the game anyway, just for the game itself to work. Basic AI behaviour is probably going to have to be part of the game itself; but higher-level logic such as "where to send this fighter group to?" can be outsourced to an external program. So it can serve as everything from a full dynamic campaign manager to a simple trigger system to manage one specific mission.
By "external program" - this might be a shared library or scripting language loaded into the game itself, or it could be an actual separate program using something like a TCP or UDP socket to receive information and send commands. But the main thing is, it should be something the user community can alter to fit the needs of their mission/campaign.