By cancelling stages you only punish all the good guys like the drivers, the volunteers and all the well-behaving spectators. A rally stage is long and only the people at the very corner with the mis-behaving spectators know the reason a rally stage is cancelled. For all the others there is just a big bunch of frustration when they invested all that time and money just to find out at the very last moment the stage is cancelled.
In my opinion they could make the timing less strict. That way they would have time to temporarily stop the stage and send an extra zero car around the stage or something like that. Also a good punishment would be if those spectators found in violation be escorted to the finishline for the remainder of the stage. Always punish the offenders, not the good guys in my opinion.