I assume you just want to compare current and previous values for the purposes of the stopping condition. Then using NestWhileList with the additional argument as in the comment by ssch is the obvious way to go. This is just another option:
For the stopping criterion, there is one alternative that I've found to be a little faster by trial and error. Instead of NestWhileList, you can use FixedPointList with a custom setting for the option SameTest. The difference is that you then also have to specify a maximum number of iteration steps after which you'd like to terminate unconditionally. This helps prevent runaway loops. And given your specific example with random numbers, that may be a real concern.
Here is your example in my approach:
FixedPointList[# + RandomInteger[{-5, 5}] &, 10, 100, SameTest -> (#2 <= #1 &)] (* ==> {10, 13, 16, 18, 20, 21, 17} *)
The argument 100 limits the calculation to that many trials. The SameTest -> (#2 <= #1 &) is the crucial part, implementing the stopping criterion, where #1 stands for the current argument and #2 for the previous argument. Unlike NestWhileList, these are provided automatically. The function SameTest can be anything you want, Mathematica doesn't care if it actually implements any real "sameness" of successive arguments. That's why it can be used here.
I just remembered another reason why I try to use FixedPoint and FixedPointList when possible: it's in the list of functions that can be compiled.
Finally, another point that may not be what you want: If you need the two arguments inside the function that's being iterated, then you can always do that by making the iterated function into a list that returns its own argument and the computed new value as a tuple. Another approach would be to use FoldList, but that's useful mainly if you don't need to implement a specific stopping criterion.
NestWhileListdoc:NestWhileList[(# + 2/# )/2 &, 1, Abs[#1 - #2] > 0.001 &, 2]$\endgroup$previous result<0the nesting will not even start. $\endgroup$