Hello Yuri,
Yes, it's a fair question. I see it as just a way of isolating agents and pipelines as mentioned here:
https://docs.gocd.org/current/introduction/concepts_in_go.html#environment. There are subtle differences between using environments and just using resources, but they can be mitigated by using resources properly. For instance:
1. If you add a new job to the "deploy to production" pipeline and forget to set the right resources, then any agent (even the "building agent" in your example) can pick up that job.
2. Resources need to be managed at the job level, whereas an environment works at a higher level, essentially being a default "resource" at the pipeline level.
However, with careful use of resources, you should be able to easily reproduce similar effects, without using environments, as you said.
Cheers,
Aravind