USB VCP-CDC and UART on STM32
when you use uart dma or interrupt version it is not blocking , the uart function return straight away before data fully send 
So it happen that you get ready to receive new data from usb before previous sent on uart . As you use same buffer for usb rx and uart tx usb will start refiling buffer as it still getting send by uart (why you miss things).

if to use dma or it then handle the completion callback to restart usb reception or implement a more elaborated fifo/buffer in between usb and uart to bufferiez incoming data as it get sent.