It allows inheritance. Many times, an ERC20 contract will be inheritated to create a new token contract. If _name and _owner are public, it would make the child contract difficult to make customized changes. Having them private and accessible by virtual functions allows more flexibility in child contracts.
Yes, it's related to inheritance. We want the variables to be private to control how they're modified. For example, on ERC20 we want to guarantee that minting tokens modifies both the balances and total supply variables together, and at the same time emits the proper event.