Ethereum has web3.eth.personal.sign
that supports signing any string.
Obviously EOS supports signing transactions, but I don't see any support for signing a string.
Have I missed this or does EOS not support this functionality?
Based on your question I assume that you are looking for a possibility in javascript?
Eosjs doesn't support signing a string but eosjs-ecc does.
See here:
There are many Wallets out there that are supporting Arbitrary Signatures (with some limitations). From what I know there's no Metamask-Style Wallet (Browser-Extension) and only Desktop-Wallets which support them.
Take a look here: Scatter-Arbitrary-Signtaure
here: Scatter-Arbitrary-Signature-Limitations
and here: Lynx-Arbitrary-Signature