I'm not sure if I understand your description exactly but I think you can generalize your pattern like so:
ClearAll[GiveList]
(*GiveList[n_,r_]:=Select[Tuples[Range[r],n],And@@NonNegative[Differences[#]]&]*)
(*GiveList[n_, r_] := DeleteDuplicatesBy[Tuples[Range[r], n], Sort]*)
GiveList[n_Integer,r_Integer]:=Module[{vars,seq},
vars=Table[Unique[],r];
seq=MapThread[{#1,#2,n}&,{vars,Prepend[Most[vars],1]}];
Flatten[Table[vars,Evaluate[Sequence@@seq]],r-1]
]
GiveList[2, 2]
GiveList[2, 3]
GiveList[3, 2]
GiveList[3, 3]
{{1,1},{1,2},{2,2}}
{{1,1},{1,2},{1,3},{2,2},{2,3},{3,3}}
{{1,1,1},{1,1,2},{1,2,2},{2,2,2}}
{{1,1,1},{1,1,2},{1,1,3},{1,2,2},{1,2,3},{1,3,3},{2,2,2},{2,2,3},{2,3,3},{3,3,3}}
I came up with multiple ways of implementing it, but the last one seems to be the nicest (and fastest) implementation I think...