In UART, what mechanism sets the "new data received" flag back to 0?
The ATmega328p data-sheet describes the setting of RXCn:
Bit 7 – RXCn: USART Receive Complete

This flag bit is set when there are unread data in the receive buffer and cleared when the receive buffer is empty (i.e., does not contain any unread data). If the Receiver is disabled, the receive buffer will be flushed and consequently the RXCn bit will become zero. The RXCn Flag can be used to generate a Receive Complete interrupt (see description of the RXCIEn bit).

The hardware seems to keep a register the size of the receive buffer. Incremented when received and decremented when read. It is only one level so the size is 0..1, i.e. one bit.
Actually there is two registers; one for possible incoming data and one for the latest data until read.
Cheers!
More details in ATmega328p data-sheet, chap. 19 USART0