Beefy is running on top of grandpa and it is generating the MMR which is sent to the other chain(e.g Ethereum). AFAIU MMR only consists of block header hashes that are generated using ECDSA. So the other blockchain is receiving this MMR. What can this actually be used for if there aren't any transactions or data stored in this MMR other than this hashes? I am probably missing something so I hope someone could clarify this to me :)
BEEFY + MMR on chainA is an extra consensus protocol (extra because it relies on chainA's native consensus) to be used by light clients for lightweight syncing and subsequent following of chainA.
This light client can be, like you say, an Ethereum smart contract in case of a ChainA <-> Ethereum bridge; but it can be any other use-case where a light client is preferred.
The light client only needs to understand BEEFY+MMR in order to follow chainA finality; it doesn't need to understand GRANDPA (which is more complex), and it doesn't need to sync any of the blocks, or even their headers. For example, it could follow chainA just by subscribing to BEEFY Justifications and only process those. The MMR pallet also provides RPC endpoints to generate and/or verify proofs that particular blocks are part of the MMR (and thus, the chain).
Higher level protocols are meant to build on the consensus guarantees that BEEFY+MMR provides.
For example, a light client could exclusively work with on-demand block retrieval, where it can request some full-node for block N, then request a MMR-proof for it and verify it against its own MMR. Maintaining the MMR in the light client has very little overhead as it is pruned, and only contains hashes.
There is also some documentation available for BEEFY, but it's work in progress.