There are ligatures (liga and dlig features) and contextual alternatives (calt). As far as I understand you, you can use both. And don't mix characters and glyphs. OT features only replace glyphs, they leave your characters untouched.
I believe completely random replacements are not yet supported in any end-user software, but you can already implement something like this in your OT features:
substitute ampersand from [ampersand.1 ampersand.2 ampersand.3];
For more details (I also took the above example from there), take a look at:
http://www.adobe.com/devnet/opentype/afdko/topic_feature_file_syntax.html