The issue is that for safety reasons Ripple currently has no way to remove the account root ledger node to completely remove a Ripple account. Since the reserves exist to help limit the size of the current ledger, any un-deletable ledger node requires a non-refundable XRP reserve (although if the XRP reserves are lowered, as they have been in the past, the difference becomes spendable again). Note that a Ripple account can use all of their XRP in transaction fees, just not in payments or trades.
There is a good discussion on why Ripple doesn't allow for account deletion on the Ripple forums. Basically, doing so would make it possible for a user (or client) to in error re-create the same Ripple account/address (e.g. if someone uses an old Ripple secret to "recover" their account). That would make old transactions signed by that account now be potentially valid against this "new" account (since Ripple uses a simple sequence number per account to prevent replays).