Roll 2d10. Replace any zeros with another 2d10 roll.
Use this instead of a d20 in any d20 system. It has the following curve for chance of beating a target score:
Now open (or exploding dice) are nothing new. I first encountered them in Rolemaster where a 95+ on a d% meant roll again and add on to the score. This is almost equivalent to a 20 on a d20 meaning roll again and add on.
This seemed cool at first, but lead to very uneven probabilities. Increasing the target required by +1 sometimes meant it was far more difficult than other times. Need an 11 instead of a 10? 90% as likely. Need a 20 instead of a 19? 50% as likely. Need a 21 instead of a 20? Just as likely!
What I was looking for was a similar "nothing is unattainable" system where each extra +1 on the target is an even amount more difficult. Ideally I wanted +3 to make something twice as difficult. That is, the initial maximum +3 or -3 on a stat could make you twice as good, or twice as bad. Fortunately (for me) in this "zeros mean roll again" system I finally found what I was looking for, whilst keeping it simple and fun:
The blue line shows the effect of +1, the red line that of +3. For example, needing an 19 instead of an 18 is only 83% as likely (the blue line), but needing a 21 instead of an 18 is only 53% as likely (the red line). Beyond a target of about 10 it roughly matches the desired rate of change.
Rolling a zero in our game now means grab an extra d10 and roll again, and the glee when someone rolls 00 and grabs 4d10 and rolls the attack is fantastic... and fear is the look on their faces when I roll 00!