Your first 'catch' example only highlights the fact that you can't pass an argument. You can do something like this by utilising the ability to scope your variables to a particular selector and toggle opacity that way. Values like 'inherit' and 'unset' can do wonders. This is why I try to avoid hardcoding values inside the mixins.
The real benefit of CSS variables and the apply rule is that you can alter them on the fly. Your loaded code becomes concise, less bloated by duplication and you can also lazyload variables to alter just about anything. Pre-processors can't do any of that.
Now, I wouldn't necessarily do away with Sass or LESS altogether. Loops are stil pretty nice to have. :)