I'm working with an API which is distributed as a dll/so file that I need to dynamically link with my python program. To accomplish this, I want to use Cython. 
I have been able to, in the past, link with the dll statically. This works well, except that the API comes in four different flavors, with theoretically infinitely more to come and the users should be able to compile them with whatever name they want (Kinda like a plugin system). Because of that, I can't just make an so/pxd file that statically links with just one library, or even links with a selection of them. 
What I need is to be able to pass the so/dll name into the Cython code and have it "import" it. I know this can be done with ctypes via ctypes.cdll.LoadLibrary, but is this kind of thing possible in Cython? Am I going to have to use ctypes to do this?
I assume you are talking about writing C modules here.  If so yes you can.  I don't know what the equivalent on Windows is, but in Linux you can use dlopen and friends.  There is a man page for it, and several web sites documenting it.  Try this link "http://linux.die.net/man/3/dlopen" it provides you with a nice example near the bottom of the page.  This is doing the same thing as what ctypes does, in fact I think this might even be what ctypes uses.
Cython: Dynamically linking with a dll/so