Well ... If you only want to talk to the device using a library like HIDAPI, then HID is OK and relatively easy protocol to handle from the host/application side.
HOWEVER - if you mean you want to build a custom HID device (custom game controller, keyboard, etc.), then you are in a world of pain. HID builds on top of the basic USB, so you must first understand that -> USB specs and several sites like
http://www.usbmadesimple.co.uk/ are your friends.
HID itself is a very complicated mess on top of this, especially building of the various descriptors if you want them to work over multiple OS-es (Windows can be super picky/noncompliant!).
Of course, all of the above assumes that you know how to use the USB stack on your chosen microcontroller (Teensy, etc.).
Again, if you want help, you need to be more precise - saying "I want to do something with USB" is meaningless, because there are so many things that could be done. You can also take an USB cable, plug it in and be done with it ... Satisfies "doing something with USB". See the problem with your communication?