I do this frequently. The easy way is to define a function that deconstructs a single composite argument with a pattern:
f[{a_, b_}] := {a + 1, b + a}
Nest[f, {0, 0}, 10]
(* {10, 45} *)
If I'm feeling fussy, I'll use a custom wrapper symbol rather than List
:
f[state[a_, b_]] :=state[ a + 1, b + a]
Nest[f, state[0, 0], 10]
(* state[10, 45] *)