I agree with you that loyalty programmes should be based on spend rather than miles. A very good template for such programmes is Welcome Rewards run by Hotels.com (owned by Expedia). You collect 1 point for every night you stay in a hotel (booked through them). On reaching 10 points, you can redeem for a free night. The value of your free night is the average of your spend per night from the 10 points you collected but you can use this as part redemption. I have just redeemed by first free night (in Vancouver this week) but the hotel rate was actually higher than my earned average so my redemption was a straight discount off the total price.
Personally, I would love to see an airline run a similar program and there is no reason why not as far as I can see apart from a lack of lateral thinking.