I've got it working smoothly but I am in no way proud of my code. Super brittle. Basically resorted to a pub-sub system that works like so:
1.) mouseDown on a draggable component causes a global onMouseMove handler to be turned on, so that moving your mouse moves the component.
2.) mouseUp fires a drop event through the pubsub system with the data of which card was being dragged.
3.) Various instances of a dropzone component are subscribed to that event, and they compare the coordinates of the event with their own to see if they are where the card was dropped.
4.) If the coordinates match, a call to the server is made adding the card to that location and removing it from its original location.
That's the basic flow. A ton of complexity has arisen around it. I just couldn't find a better way.