It makes tracing changes easier, and combined with Araxis Merge, you can put all code under the microscope.
Also, why you aren't using continuos integration and build testing?
That way you can easily trace when something breaks.
This can be avoided with best practices, it's not a particular Juce issue, you have to adapt to it being a moving framework, and sometimes you may have to freeze your code and do updates as necessary, or keep up with the changes.
Whenever I change that virtual methods like that, I always add a private virtual override that will break any existing code, and avoid those nasty silent bugs. If you search for the JUCE_CATCH_DEPRECATED_CODE_MISUSE you'll see these all over the codebase.
It seems unlikely that I'd have forgetten to do it for that method, but in refactoring the L+F classes I did change a huge amount of code, and perhaps one got overlooked.. Or perhaps you don't have the JUCE_CATCH_DEPRECATED_CODE_MISUSE flag enabled. Either way, sorry!