The provider provides you with the connection interface to the appropriate blockchain network.
This blockchain network is reached by an address pointing to a certain node running and synced with the network.
That's why when we define an HttpProvider we pass the URL of the running node, it could be either:
- Ganache local node
- Infura remote node pointing to main/ropsten/rinkeby/etc...
- Custom Get/Parity Node pointing to a private or public chain
Now after we setup our provider, we pass it to the web3 instance so it knows the node that we are dealign with.
For the Accounts part of your question, I can say that simply an account is a keystore located somewhere either at your machine or the node, but its private key is encrypted with the password that you provide to web3.
Regarding your last question, It's possible to have the same account dealing with different networks trough different providers. As I said the account is just a private/public key pair. But for sure every account/network pair is undefended and there's no interoperability between networks.