Maybe I'm missing something, but I don't see how this is all that bad.
If you want terseness (though I don't particularly like this sort of code) you can just do this:
if(value *foo = getThing(someKey))
{
//do stuff
}
As far as I know, your only options for dealing with Hash Tables are NULL results, exception throwing, an out parameter and success return (like TryGetValue in C#'s Dictionary), and optional types. All of them (sans exceptions, which is just ugly) are pretty much the same thing in the end.
I'm with frob that calling an "Exists" function first is a waste of both your time and the CPU's. This is also sort of similar to the EAFP principle that python programmers love so much. Take the Nike approach and "just do it".