The UART protocol, as Mattias explained, is a time-based asynchronous protocol. What defines the boundaries between the bits is the time taken from the beginning of the start bit. So the microcontroller will "sample" the bit
(N+half)/baudrate seconds after the start bit begins. The half bit is just to sample in the middle of the bits so it can have half a bit difference in timing between receiver and transmitter (remember that differences are cumulative and the worst case happens in the last bit of each frame, which is usually, but not always, 8-bit wide, depending on configuration). The key to make it work is having the receiver and transceiver with baudrates as near as possible.
So, the microcontroller counts time between each bit to know where each bit is inside a frame. The next character will go into the next frame. When each frame ends, the microcontroller starts to listen to the next frame automatically, so when the next start bit comes it already knows it should start a new frame. That's how the characters are separated.
Additionally, I'll add that you don't actually need two frequencies to transmit to a UART-receiving microcontroller. You can use a single frequency as OOK instead of two frequencies as FSK. It has higher spectral efficiency and the circuits are much simpler, since you only need a carrier wave switcher as transmitter and a single frequency detector as receiver, pretty much like morse code. Remember to generally use carriers with frequencies that are much higher than the baudrate, otherwise the simpler circuits won't work properly.