First, why the RTS/CTS/DTS/DSR? Why not just have a single signal on each side that goes high when it is able to receive and goes low when its buffer is full?
Simple. Because RS-232 is intended to connect a terminal to a modem and a modem to a computer and you need to know more than just "you can send".
Data
Terminal
Ready is needed for the terminal to tell the modem it is ready. Drop this and the modem hangs up.
Data
Set
Ready means the modem is ready to send / receive data.
Carrier
Detect tells the terminal that the modem has a connection to another modem.
Request
To
Send tells the modem you want to send data out from your terminal.
Clear
To
Send tells the terminal that the modem is ready for sending data.
etc. etc. This is all well documented and comes from the historical needs of the interface in its intended usage. i.e.:
The RTS and CTS signals were originally defined for use with half-duplex (one direction at a time) modems such as the Bell 202. These modems disable their transmitters when not required and must transmit a synchronization preamble to the receiver when they are re-enabled. The DTE asserts RTS to indicate a desire to transmit to the DCE, and in response the DCE asserts CTS to grant permission, once synchronization with the DCE at the far end is achieved. Such modems are no longer in common use. There is no corresponding signal that the DTE could use to temporarily halt incoming data from the DCE. Thus RS-232's use of the RTS and CTS signals, per the older versions of the standard, is asymmetric.
RTS/CTS weren't originally intended for "flow control" from buffered modems like we think of in "modern" times. It was from very early half-duplex operation but was used for the similar property of "flow control" later when effective line speeds started to not be == local terminal connection speed due to compression with MNP, etc. etc.