Q1. It is generally recommended to place the self hosted agent within your azure vnet. This gives it better performances especially when accessing resource hosted in a private endpoint.
Q2. The operating system to use soley depends on the type of project. Fro example, if your pipeline has to do with Windows-specific tasks like .NET Framework builds, PowerShell scripts), I would say go for windows os. For others, you can go for linux OS as it is ligher, cheaper and also supports large range of tools.
Q3. Absolutely. You can use same set of agents to deploy to different environments, provided that they are all in the same vnet. For example, in one of my previous projects, we had prod vnet, stage vnet and dev vnet. prod does not share vnet with other environments, stage and demo shared vnet, while dev and test shared vnet. it means we had only 3 hosted agents - pod agent, stage/demo agent and dev/test agent. stage/demo agent was used to deploy to either of the two, while dev/test agent was used to deploy in either of both. no other environment shared with prod
You can reference this article for more information https://learn.microsoft.com/en-us/azure/devops/pipelines/agents/agents?view=azure-devops&tabs=yaml%2Cbrowser