The easiest way to have users interact with the Blockchain is to use the injected web3 from Metamask, which gives the app and them access to their accounts. Through Metamask, they can sign transactions (eg sending tokens) and send Ether. But of course, this requires users to have Chrome and Metamask.
The typical fallback is if there is no Metamask, DApps connect to the user’s local geth (http://localhost:8545). This gives them access to their accounts and the Blockchain, but then again you need your users to run a local geth node, and be familiar with terminal commands to unlock their accounts, etc.
There might also be some other light wallet clients, but I haven’t used these yet.
For my DApp, another thing I have done is created a remote geth node on AWS and use that as my web3 provider. (Digital Ocean also seems popular, mentioned in many posts here.) What this does is provide web3 to users who don’t have Chrome/Metamask or a local geth node running. They can even access Blockchain data from mobile. However, it’s read-only, they would still need Metamask or a local geth to sign and send transactions. Also note if you have an https site, you’ll need to create an nginx reverse proxy server to create an SSL geth node, which geth by default does not support.