primero que todo, leete el protocolo (el resumen,, obvio). USB in a nutshell anda muy bien. y es importante leerlo todo, porque es un toque complejo. sino te las vas a pasar puteando.
CDC no es USB, es un crossover entre un rs-232 conectado por usb por un COM virtual,, basicamente.
en el caso de USB real (bulk, interrupt, control, HDI ,etc) en mi experiencia hay dos posibilidades. o MPLAB (MPLABX XC8 en este caso) o CCS.
CCS es mas sencillo, el stack es más concreto y directo. te chusmeas los ejemplos y lo sacás en dos patadas. ahora bien, cuando quieras hilar fino puede que tengas un par de problemas porque no está tan bien y detalladamente hecho.
en MPLAB(x) es todo lo contrario: podés estar un buen rato para hacerlo andar, pero es un stack muy poderoso.
a nivel configuración la diferencia fundamental es que en CCS, segun recuerdo, para cada modo de USB tenes una librería levemente distinta, o le agregás dos o tres defines y configuras todo. en MPLAB es un poco más complejo porque está todo junto. tenés que leerte los .h y .c principales para que te ande bien.
por supuesto que el stack de mplab es más pesado también, a no ser que lo trunques,, pero de nuevo, para eso, vas a tener que estudiarlo.
si tenés una duda puntual hacerca de algún modo o algo , chiflame que yo labure bastante tiempo con el protocolo