Part of it might also be the mental "snap to grid" effect, for lack of a better term, where the existence of a "good enough" UI widget means most people won't bother to create something new and different that might be an even better fit for a particular situation.
For instance, if you want to turn something off and on, you could use:
• An "On" button that turns into an "Off" button, like a toggle or checkbox
• Two separate buttons (perhaps segmented), like a radio selector, or a select / pulldown with 2 options
• A button that you need to press and hold for "On" which reverts to "Off" when released, or the same but on hover rather than on press
• A box / region that you drag some other object into for "On", and drag it back out for "Off"
• A button that will "latch" into the "On" state when clicked, which requires a complicated procedure of clicking many other buttons to release the latch and turn it off
The first three examples are fairly simple / obvious, and are thus ubiquitous. There are probably other simple / obvious approaches, but probably not many, because the interaction here is really, really simple — it's a binary off / on. Looking at the real world, it's hard to find examples of a binary off / on control that aren't basically the same as the top 3 bullets. And when they are different, it's usually through some additional elaboration that serves some other purpose than "make it simple / obvious to turn the thing off / on", much like the last 2 bullets.