Currently the Ethereum-JS client does not have a truly peer-to-peer way to request blocks, so someone needs to host an RPC server for the moment.
You can host this yourself, or you can encourage your users to use MetaMask or Mist. The advantage of those browsers is that in addition to handling the blockchain connection, they also handle user accounts, which is another pain point and security issue for many basic Dapps.
Fortunately, there's a lot of good work being done on peer-to-peer browser based Ethereum clients, including a demo from Devcon 2 where the IPFS team showed a browser client synchronizing entirely from other browser peers, so we're getting there, just not yet.
As a MetaMask developer, I can tell you we're very excited to have actual Ethereum clients running in the browser, and will be keeping our client as peer-to-peer as possible within the browser context, as our options mature.