You are not going to like what I am about to say. The only reliable way to cancel an operation in progress is to use cooperative cancellations techniques. This question already covers most scenarios so there is no need to rehash them here. Plus, they probably will not help you in this case anyway.
The problem is that you have a 3rd party API that, presumably anyway, does not offer any cancellation support. If that is the case then you really only have two options; only one of which is good.
Option 1: If the API is managed (running in the CLR) then you could put all of the calls to it in another thread and then abort the thread if it is misbehaving. It is a bad idea because aborting threads can lead to memory corruption. It might not work anyway because the CLR tries to inject aborts at potential safe points in the code. If the API is executing unmanaged code then the CLR may delay the abort until the execution returns back to the managed realm which will not happen if the call is hung.
Option 2: A better option to go with is to redesign your application so that there are two processes running. One would be the main part of the application and the other would act as a proxy for the 3rd party API calls. You would then use WCF (or whatever) to pass messages back and forth. If the API misbehaves and hangs then the main process will kill the child process and spin up a new one. The main process would be immune from the concerns of memory corruption because the API calls are isolated in their own process. It would be a lot of work to refactor your code to set this up correctly, but it is one of the few options that would actually be reliable.