This example is fairly simple, but if you had multiple cc_binary targets, each depending on the same core libraries but using different configurations, you'll quickly begin to see the problems:
1) Bazel's memory usage will skyrocket: each ConfiguredTarget (a specific target with a specific configuration) takes up memory, and the entire transitive dependency tree of each binary are separate ConfiguredTarget instances.
2) Action caching and reuse goes down: so Bazel ends up executing more build actions. We attempt to merge identical actions where possible, even if they come from different ConfiguredTargets, but configuration changes do tend to cause the actions to be different, so you end up with the same source file being built several times with several slightly different command lines.
This is a problem of scale, and hits the largest Bazel users the worst. Inside Google, we spend a lot of time and effort on monitoring memory usage and action cache rates to try and stay ahead of this, and so we've had to opt to make defensive choices to try and head off the worst of the bloat.
We do have several long-term projects to try and address this, and if we can we'd love to have some kind of facility like you propose. I am very much looking forward to being able to add a `platform` attribute to ~every binary rule, and stop using the `--platforms` flag altogether unless it's as an override, but we're not yet in a place where that makes sense, unfortunately.
John C