Not to long ago I mentioned something similar, so I like your idea
It could work with the current system, by attaching a GGEP extension to the Query, indicating how many hits you need (and are remaining). This way, older clients still work by the TTL/HOPs, but newer clients could go by that GGEP packet if present. During the initial stages, where clients that do not support such GGEP extension, you won't notice much of a difference. But over time, it would.
The only drawbacks I see are these:
1) Like you noted: What if someone enters keywords that doesn't match ANYTHING. It could cause the Query to remain on the network for a very long time - so one would have to add a timestamp to the message as well (ie., kill the query at 10:31 AM GMT on 01/02/03)
2) Abuse or malfunction. Clients that purposedly or accidentally do not lower the value (or change the above timestamp), in order to overflow the network with useless messages. Although, this is the same for clients that rely on TTL/HOPs at the moment - one could simply reset that number back, and the message lives on longer than usual...
Otherwise, it could be a benefit for not only those looking for rare files, but common files. Perhaps someone wants a maximum of 1000 hits - sometimes you can get well over that amount of hits on Gnutella, especially if the keyword is too generic. It could thus reduce the number of messages on the network, provided all clients behave properly.