Here are random-but-not-completely random techniques I use.
1) Shuffle bag. Put all valid outcomes in a bag, choose one randomly and remove it from the bag. Repeat until the bag is empty then refill the bag. To add back in randomness, refill the bag when it only has X items remaining.
2) Progressive percentages. First roll X% chance, if fails second roll is X+Y%, then X+2Y% etc. Reset to X% on success. Both the start value, and progression can be adjusted (even non-linear).
3) Internal cooldowns. Roll X& chance, if success, do not roll for next N seconds or M attempts or whatever. Can be combined with other methods. To add in more randomness have multiple event checks with different coodlowns, ie make 2 rolls at 25% with 3 and 7 second internal cooldowns as opposed to 1 roll with 50% with a 5s icd (not exactly the same probability, but you can calculate and match if important).
4) Pre-rolled spacing. Rather than checking vs a percent each event, simply choose when the events happen. For example, "this boss crits every 1d4+4 attacks." Works well when the want something to happen relatively consistently, and somewhat random, but you don't want back to back events. In someways a special case of methods (2) plus (3). Again for more randomness you can have 2 or more overlapping sequences.