My semi-realistic damage system was designed after the realistic vehicle failure resource. It was design with event driven code. This allows the code to sit idly until it's needed, getting rid of unnecessary usage of computational resources that can be given to other, more important resources.
This was done by running a simple loop that looks for specific conditions BEFORE kicking off other important functions. Specifically with this resource, before checking if the vehicle has taken damage, or if damage should be taken; The resource first waits until the player enters a vehicle. Once they're in the vehicle then it starts checking everything. Once the player leaves the vehicle, all related functions stop running and the script enters it's idle state, waiting for another event.
Even then, while the player is inside the vehicle, it awaits any damage events before calculating any damage taken to the vehicle. This means, that if the player is driving safely then no damage needs to be calculated, once they crash, damage is calculated after the event is fired.