Why isn't the linker able to link against libusb?
It is able to, but when the linker sees that library it doesn't have any undefined references to symbols in libusb, so it just moves on and ignores it. Later the linker sees libdcdc-usb, which has undefined references to symbols in libusb, but it's too late by then, the linker has already closed libusb and stopped looking at it.
As the comment says, order of linker arguments matters, but the comment suggests moving them earlier, which is the wrong way round.
In fact I read somewhere that the linker information should come after the source argument that requires that library.
It's not just "linker arguments after source files" you need to order the libraries so that libraries that provide symbol definitions come after the objects that need those definitions.
libdcdc-usb
depends on libusb
so libusb
has to come later, so move the pkg-config
call to the end.