From a quick test, this appears to be related to the “Execute queries in threads” setting in Options->Oracle->Transactions. If checked, I always have to wait for the current command to finish. If unchecked, a cancel returns control to Toad immediately. SQL*Plus does not have this option, so it acts like having the Toad option unchecked. The downside is that one loses one of my favorite features of Toad – its threadedness!
While I obviously don’t know anything about Toad’s inner workings, some vague recollection of mine says this might be more of an Oracle Networking limitation, which no Oracle Client can override. I’m not sure, but thought I should put that out there as a possibility…
In any case, check out that option to see if it’s a viable workaround for you.