It’s because Gateway objects can be in a variety of different namespaces, depending on what underlying gateway controller you’re using. So the route needs to point back to wherever the gateway class object resides. This is completely independent from where you’d want to put the route object, which needs to reside in the namespace where the route’s services are.
You misunderstand – the gateway class and the gateway controller implementation can be anywhere in the cluster. They don’t have to be unique either. And route needs to be in the same namespace as the services the route uses – NOT the gateway class. So the route needs to say which gateway class it’s using, and that will include the namespace of where the gateway class is actually located.
But nevertheless found the answer in ReferenceGrant: ReferenceGrant - Kubernetes Gateway API - which sounds like a very confusing concept that is not related to RBAC