Let me reformulate: I strongly think that we shouldn't use an uncaught exception (or rather only caught by our default uncaught exception handler) for this. If we have a nodetool command to stop something, then stopping it is not an error, and thus we shouldn't have a line in the log that start with ERROR. Not only because it scares people, but also because you don't want to have false alert for any system that is grepping the log for ERROR. And also because that would be super ugly.
We do want a log message at INFO though. And it wouldn't hurt to make it as informative as we can. Something like "Stopping compaction of [sstable1, sstabl2, ...] as requested by user". Now I care less whether we use an exception internally to achieve this or not, and I could see benefits in throwing an exception for the JMX commands that are stopped, but I'm -1 on having an ERROR log message for a user triggered action.
As for stopping validation compaction, this will actually leave repair compaction hanging. It's probably ok to add it still since it's better than nothing, but this ticket should probably spawn a specific 'stop repair' ticket.