Design Considerations for Raspberry Pi Expansion Boards
http://www.ruggedcircuits.com/10-ways-to-destroy-an-arduino

Check out that page which deals with protecting an arduino. Your GPIO pins never need to source a lot of current unless you are powering LED's. Simply place a resistor in series that limits the current to 10-15 mA. A 330Ω or 220Ω resistor should do.

The total 50mA limit is internal to the RPi so external buffers and power supply would be needed if you plan to source more current. Something like the MC74LCX16245 can do 16 bits of bi-directional buffering. Keep in mind this chip has two 8 bit buffers and bidirectional means you have to select which direction the entire 8 bits goes. There is no individual selecting of direction for each bit. So you can do 16 out, 8 out/8in or 16 in. Another great benefit is that it can handle 5.5v on the inputs so you can interface this to 5V logic if needed. The enable pins could be used to power down the GPIO pins for hot inserting. It can also protect against ESD.

An 74HC244 can do 8 bits uni directional with two 4 bit groups that are individually enabled. This can be split to 4in/4out if needed. Might be best for driving LED's or split for UARTS Tx/Rx. An 74AHCT16244 is a quad 4 bit version for a total of 16 bits. Also had ESD protection.

If you need more 3.3V current, you could use a small switching regulator to step down the 5V. The 5V is limited by your 5V USB supply. here is an example of a small 3.3V 300ma regulator: http://www.hobbytronics.co.uk/d24v3f3-3v3-regulator

This Digikey article also has some pointers for digital input protection and also talks about ESD protection:
http://www.digikey.com/en/articles/techzone/2012/apr/protecting-inputs-in-digital-electronics