For a lot of things you do not need to interface them through opto couplers, as simple drivers would be enough. The things you must be careful with are putting input signals onto the R-PI, as all inputs do not tolerate voltages above 3,3 Volt, so do not put TTL level signals directly to inputs (also true for SPI, I2C and UART signals). In case you have a 5V signal that must be input, just use a resistor divider, often 2K2 between the 5V source and the pin, plus a 3K3 resistor between the pin and GND will do the trick. Its often smart to put a small resistor (1K) in series with a pin to protect it.
Other things to be careful with are relays, these may generate high voltages across the windings when switched. Do not use a simple transistor to switch them, but use a special relay driver IC, or at least put a diode across the relay windings (cathode on the supply side). Also take care not to connect long wires directly to the I/O pins, or the pins may be damaged by static electricity, at the very least put 1K resistors in series, or indeed use opto couplers. When using an opto coupler as input to the PI remember to still put a series resistor in between the optocoupler and the pin. If you accidentally program the pin as output, and output a "1", and the optocoupler shorts the pin to ground without the resistor you will blow up the GPIO.
So even with optocouplers without series resistors and other precautions you could still damage the SoC if you are not careful or do not know what you are doing.
All said, the exact same things also apply when interfacing to other microcontrollers, so the R-PI is hardly unique in this regard.