With vanilla MySQL there are limits to how big a database can get. If your application/dataset is continually growing, eventually you will need to shard the database. With Vanilla MySQL that entails spinning up a second primary db and teaching the application which db to route queries too. Or putting it another way, the sharding logic lives in the application.
With vitess the sharding logic lives “in the database” so your application doesn’t need to be updated.
It comes with the overhead of some middle ware but in my experience that overhead is well worth keeping the sharding complexity out of the application.
Keep in mind I’m not talking about a database with hundreds of tables getting too big but rather a small set of tables that are large enough and have enough traffic that scaling the underlying instance becomes problematic.