You are perfectly right, it is not a bug. It's poor game design. Let me explain what needs to be implemented, and what I think is the problem right now.
First: The problem right now: I guess there isn't sufficient coding done on the behavior of the drivers. Hence, they look like going on rails. All seem to be driving the same line, doing the same type of overtakes and what not. We don't see Ricciardo diving up the inside from far out, performing magnificent overtakes, and we don't see Max being an absolute monster on the defensive end. They act very much like (the same) robots, with the exception of having different pace. But pace is far easier to code than the unpredictability needed for overtakes and/or mistakes.
What I think needs implementing is a far greater range of mistakes. Missing the breaking point entirely, higher chance of spinning (especially off line), massive understeer/oversteer and so on. But the problem is something you explain in great detail: Randomness. This is a game, everything is a result of an equation and randomness. That's not to say it's impossible to achieve, but I guess it's a bit difficult. My simple take on it is as follows:
In any given turn, implement a base chance of a mistake happening. For example, at turn 8 in Baku (castle), they make it a 0.05% chance a driver takes too much kerb, risking getting airborne and thrown into the barriers. Further, you make individual drivers have "traits". For this exact case, we say that Grosjean has an 2x increased chance of making such a mistake, while Lewis has a 0.5x decreased chance of making that mistake. This would result in Grosjean making that mistake 0.1% of the time, Lewis 0.025%. Further on, you increase or decrease the chance of it happening based on whether the driver is pushing or battling for position, or just managing his race.
Driver traits: Traits not just for mistakes, but also for lines (wet, dry), overtake style (inside, outside, "fear" of contact, how often they dive), tyre management - making mixed strategies more of a sight, "nervousness"/experience - think new drivers in the lead for the first time, aggressiveness - not just in overtaking situations, but general pace. Trying to make the most out of opportunities given (using rich mix for longer periods, risking the engine), form - Getting into rhytm, overperforming for shorter or longer periods of time (or vice versa), sometimes as a result of good/bad results.
The traits should not be static. Neither should the risk of a mistake in any given corner. But that isn't the most important aspect, randomness is.
If this was implemented, we would see far greater diversity in the game. Some races would be clean, some would be carnage. Some races you would see Magnussen absolutely smashing it due to form, pace and aggression, the next three you would see him smashing into others due to high risk-maneuvers. The implementation of the SC isn't the issue, the issue is that there is seldom carnage. especially between the AI's.
Implementing this is probably really hard, but what is really tilting is that Codemasters don't seem to even acknowledge that it is a problem. This is very often the response:
They surely must know, from simulations, that the amount of crashes (NOT mistakes, NOT SC's/VSC's, NOT mechanical failures) between the AI's are far from what we see IRL.