Libusb is built on top of IOKit and (theoretically) makes it easier to port code to other platforms. But you pay for this with another dependency, an increase in bug surface area, and another layer of abstraction.
IOKit gives you more direct control over everything the OS has to offer, especially OS-specific/non-portable features that libusb omits or hamstrings. Also, if libusb isn't working as expected, you might need to debug using IOKit anyway to figure out what is going on.