I know that having TX, RX, GND, RTS, CTS are good. What about all of the others? Do devices these days even make use of the other pins (DSR, RI, DCD, DTR)? Is it safe to generally leave out these pins? It seems to me like these are mostly only used in fully-specified legacy DCE/DTE equipment. FYI I'm asking this question more specifically in the realm of embedded systems, not PCs.
Yes. Actually, a lot of RS-232 applications don't even use RTS/CTS anymore and have no hardware flow control at all - it is all done in software. Especially with the advent of virtual serial ports this is more the rule than the exception.
However, if you want to make a general RS-232 interface, RTS/CTS is smart to leave on there, just in case you are planning to attach a peripheral that uses it.
Many systems today only use RX, TX, and GND. RTS/CTS is sometimes still used for flow control. It can be quite useful to have flow control handled out of band by the hardware, as apposed to burdening the higher level protocol with it.
If you have a device that you know won't be using RTS and CTS, it is a good idea to loop these back to each other at your end so that if the other device does use them things will still work. You won't get flow control, but bytes can still be transmitted and received. As a example, take a look at the schematic to my RSLink2 product. Note how pins 7 and 8 are connected together on the RS-232 connector, although they aren't used anywhere else.
The remaining lines are almost never used anymore today. These were largely to control telephone modems, which had ring indicators, carrier detect, on/off hook, etc. Basically nobody uses telephone modems anymore, and even when they do, they are rarely external boxes connected to the computer via a RS-232 cable.