I believe that C# did something similar. It would certainly solve the question of package's virtuality quite nicely and wouldn't change any existing code, just allow for those who want virtual package functions to have them.
Stopping to conflate visibility with virtuality would solve it in a more simple way.