I believe what Bale's describing is a silent fail from a UI button. If a button is used and there's an error or failure, there should be an indication of it. No scripts should be running if the button can be pressed. If you press the ode button and it fails, yeah, an abort state would seem an appropriate response.
use_skill() returns a boolean as to whether it's successful or not. The script running it should handle the function, whether abort or popping a MMJ or simply moving on to greener pastures. I use a wrapper myself that combines MP saving with a true limit on how many times a skill can be cast.