Why not make everything 'virtual'?
Because you don't want people overriding methods that you haven't designed the class for. It takes a significant effort to make sure it is safe to override a method or even derive from a class. It's much safer to make it non-virtual
if you haven't considered what might happen.
Eric Lippert covers this here, on method hiding