Thats funny. I very rarely find the need to use clear/clearvars at all. I know what lives in my workspace. And I run MATLAB continuously, virtually never exiting unless I reboot my computer. And given that I am constantly playing with different problems to answer questions on Answers, testing some new code of mine, etc., there are lots of things that live in my current workspace. (A fair amount of deadwood too.)
The point is, if you will use a variable x (or whatever variable) then you either just created x to be used, or you know what is in x.
If you use scripts a lot, that will access variables blindly from your main workspace, then learn to avoid scripts. Learn to write and use functions. Scripts are a tool that novices learn early in their careers, but cause them an infinite number of problems as they advance in MATLAB.
The way I see it, IFF you know what lives in your workspace well enough that you confidently know what it is you need to keep, then deleting the rest is a waste of time. If you don't know for sure what you are deleting, or are sufficiently sloppy in your typing so that you forget the - in front of except, then clearing variables en-mass is dangerous.
So personally, I see this as an unnecessary crutch. But I can accept that some people use, and even like crutches.
Ok, so IF you feel that you need the crutch, then use a tool like keep (found on the file exchange) or one of the many variations posted there over the years.
By forcing you to use a different tool when you want to delete all BUT some list, it completely avoids the problem. So use clear or clearvars when you want to explicitly clear some list. When you want to delete all BUT some list, then use keep.