Arduino Uno still boots and runs but no serial communication over USB
As @Juraj mentioned, if it's enumerating as a serial port, the atmega16u2 is fine.

You may be able to replace the atmega328p/au. It will take some doing; you'll need to remove the chip, insert a new one, and use another Arduino as an ArduinoISP to program the bootloader into your new blank atmega328p.

Any chance you might have uploaded a sketch that is spamming the serial port on startup? If so, try this procedure (h/t to the Arduino forums, it has saved my bacon a number of times):


Disconnect the usb connection
Begin holding the Reset button
Connect the Arduino
Initiate upload (while still holding Reset continuously)
As soon as you see the RX light flash, release the Reset button. 
The first attempt to upload will fail, but with luck, the second try will occur before the 2-second bootloader delay ends (and your sketch begins to execute).


If this works, I'd suggest including a delay(3000); or similar in your setup().