Actually, we don't need Metamask. To make a transaction you just need to access a node of the blockhain. You can access the node either by running afully synced or light node on a client. or you can just have your web app to talk to a server connected to a node. Metamask is popular because it allows you to run Ethereum transactions right in your browser without running a full Ethereum node.