How do service tags work?
Tags are used to find services while building the container by so called compiler passes. They are not available during runtime of the container.

You can find the default compiler passes in CoreServiceProvider::register().

Usually, the tag related compiler passes all do the same thing. Find all services and add them to a service, so that when that service is instantiated, it has a list of service objects that it can do something with.

Thats why this has been abstracted with the service_collector tag, which tells it to pass all services with the tag to the provided method. That's done in TaggedHandlersPass::process()