Well, an absolutely terrible way of solving the specific question is to use Trace:
In[72]:= getUsage2[s_String]:=Extract[Trace[Symbol[s]],2,Apply[Function[symb,MessageName[symb,"usage"],{HoldFirst}],#]&]
In[73]:= getUsage2["Plot"]
Out[73]= Plot[f,{x,Subscript[x, min],Subscript[x, max]}] generates a plot of f as a function of x from Subscript[x, min] to Subscript[x, max].
Plot[{Subscript[f, 1],Subscript[f, 2],\[Ellipsis]},{x,Subscript[x, min],Subscript[x, max]}] plots several functions Subscript[f, i].
In[74]:= getUsage2["$Line"]
Out[74]= $Line is a global variable that specifies the number of the current input line.
That's surely rife with corner cases, but the idea is that the first thing that's going to be evaluated during Symbol[ s ] is, well, Symbol[ s ], and Trace is going to return that result wrapped with Hold to avoid further evaluation. Of course, in the case of $Line, it continues to evaluate further, and if that further evaluation had side effects, you'd see the side effects. E.g.
In[81]:= a::usage="a is a symbol with a usage message";
a:=Print["Hello World!"];
In[83]:= getUsage2["a"]
During evaluation of In[83]:= Hello World!
Out[83]= a is a symbol with a usage message
In particular, this doesn't stop evaluating; it just lets you see what the expression was at the intermediate step. So I wouldn't recommend this approach in general, but it probably does generalize to the problem of seeing the result after one iteration, at least for off-line investigation.