You can do that through Ethereum JSON-RPC.You have to use
eth_call - read from contract
eth_sendTransaction - sendtransaction to a contract
you'll also need to have an Ethereum node started, most probably withunlocked account to execute transactions from it. Which means you don't want to run it on public networks, but rather in local network. That's what Mist do for you essentially.
MetaMask providessame API for browser based app, but requires an additional plugin to be installed into a browser