The UARTs typically used in RS232-type serial systems work by sampling the data line somewhere mid bit according to a division of the predefined baud rate base frequency clock. As such, if the sent data and receiver are not on the same frequency the "sample-point" will wander closer to the edge of the bit frame on successive bits.
With a normal UART the bit length for a byte is 10 or 11 bits. 1 Start, 8 data, and 1 or 2 stop bits. Half a bit of wander on the 10th bit translates into 0.5/10 = 5% error.
However, in reality your tolerance is less than that because you also need to add in the latency of you base frequency period which will add in an offset from the leading edge of the start bit. The higher your base frequency, the less effect that has.
As for using a 555 timer for this purpose, I would not recommend it unless you plan on having a manual adjustment in the 555 circuit.
A USART on the other hand uses a more complex control method that attempts to synchronize the transmission to the received data. This can be through using a data pattern that has an embedded clock, by using a passed clock, or by some form of phase locking to the received data edges. (Though arguably the latter is really pseudo-synchronous.)