Does the Microchip USB-CDC driver buffer its output?
It sounds like you are using an output call descended from or crafted in imitation of puts.  puts() is traditionally a stream function and so should not be expected to necessarily commit output until something occurs such as:


it sees an end-of-line character
it fills an internal buffer 
you decide to call fflush() on stdout


(and perhaps a few other related triggers which don't immediately come to mind)



As USB is a packetized interface, you could also have an unsuitable algorithm in the firmware for deciding when it's worthwhile to send a packet.



Finally, while the CDC-ACM driver should be vendor independent, the posix serial API by which application programs access it can be configured to a wide variety of behavior.  Terminal programs normally put it in a fairly raw and responsive mode, but if you end up writing your own client you will likely need some termios adjustments.  You can play with many of these settings from the command line using the stty program.