USB transmissions crash my software GUI
According to the USB CDC Class on an Embedded Device application note by Microchip which would mostly apply to other device classes as well:


  The USBTasks routine may be used in a polled, cooperative manner as demonstrated. If so, nothing in the main loop should block for more than a few microseconds or events may be lost. 


So the main two solutions that come to mind are:


Rather than wait for the ADC conversion to finish start the conversion and then use a conversion complete interrupt so that the main processing loop can continue while the ADC is taking a sample.
Set the USB stack to use the interrupt-driven mode to remove the requirements to call UsbTasks so often.


For most applications I'd say the latter is probably the easier solution so you don't have to worry so much if your main loop stalls a little while.