All value is subjective, even the value of one's own life.
The function of money is to be a sort of lubricant for exchange. Barter is inefficient. Contracts are dependent upon courts to enforce them and lawyers to analyze their every comma and semicolon trying to either enforce them or get out of them -- so, there is still the efficiency problem. Commodities have the benefit of being valued by large numbers of people. Even if the person you want to trade with doesn't value gold (or whatever commodity you choose to be the medium of exchange), someone else probably will.
The problem of there being insufficient gold, silver, copper, etc., to back a currency depends on the terms of the exchange. For example, there could be a minimum requirement: once you have X amount of currency for copper, Y amount for silver, Z amount for gold ... you can exchange it for the appropriate metal. Even more efficient, however, would be a commodity-backed digital currency: based on howevermuch gold, for example, you have on deposit in a vault, you get so much "TradeCoin," which can have as many decimals as necessary to make it useful for buying even a stick of gum with your gold, without having to cut a micron-thick shaving from a hunk carried in your purse. I actually think this is an elegant solution. The amount of "TradeCoin" could even be updated on a daily basis, as the value of the underlying commodity changes.