TRANSACTION_SERIALIZABLE does not allow other users to insert rows that would affect the current transaction's results. TRANSACTION_REPEATABLE_READ does allow those inserts.
For example, this might be useful in a banking application. If one user is updating the status on an account, other users shouldn't be able to insert transactions until the update is complete because the fee structure might be changing. [It's a contrived example, I know.]
so does this mean that all Isolation levels really provide is different granularity locking?
It's a bit more than granularity. The isolation level sets the locking behavior -- what gets locked and what locks you will honor.
subject: What is the practical use of TRANSACTION_REPEATABLE_READ?