It is pretty simple. Persons A, B, and C store 10 BTC each with you, so you have 30BTC. You figure on any day you need 10BTC handy for all of the transactions of ABC. That leaves you with 20BTC to spend, and assuming they all don't come asking for it at the same time, you are fine.
When doing this, you need them to send you the BTC, and you keep a record of their account in a database. Transactions between them just update their db records (not the blockchain). Only when they withdraw or pay out to someone not in your system do you need to spend the money in your reserves.
Looking at mtgox, they could easily do this; the record of the coins that are yours is not what is in some address, but just what is in their db. Since they hold a huge amount of coins for a huge amount of users, it is unlikely that all of their coins will ever be withdrawn. In fact, many users may be dead or no longer interested in bitcoin or simply forgot their login. All of the bitcoins belonging to those users in essence will never be withdrawn, and mtgox can get away with spending them without worry. Using login statistics (which I am sure they have) they can probably make a guesstimate about the amount of their reserves will never be collected, and so they can spend at will.
I am not saying that mtgox is engaging in this (heck they probably make more money off of fees), but it would be so simple and totally invisible to anyone who cares.
Frational reserve banking is super easy and it just relies on a lack of transparency in addresses assigned to users with actual btc in them.
Interestingly this can make it so there are in some ways more bitcoins in circulation than in existence, as trading with db bitcoins is basically equivalent to real ones.