Wrapping the current solution into a function can easily be done:
v3[v1_,v2_]:=Table[{#[[ ;; ]]~Join~#[[{-1}]]} & /@ v2// #[[j]] & // Table[{#[[;; -2]]~Join~{v1[[i]] + #[[-1]]}} & @@ #, {i, Length@v1}] &, {j, Length@v2}] // Flatten[#, 1] & /@ # &
And you would apply it like so:
v3[v1new,#]&/@v3[v1new,v2new];
%//Dimensions
{4,4,4,4,2}
To apply it yet again:
v3[v1new,#]&/@#&/@(v3[v1new,#]&/@v3[v1new,v2new]);
%//Dimensions
{4,4,4,4,5,2}
And again:
v3[v1new,#]&/@#&/@#&/@(v3[v1new,#]&/@#&/@(v3[v1new,#]&/@v3[v1new,v2new]));
%//Dimensions
{4,4,4,4,4,6,2}
Given the new definitions:
v1new = {{1,0},{0,1},{-1,0},{0,-1}};
v2new = {{{u, v}, {1 + u, v}}, {{u, v}, {u, 1 + v}}, {{u, v}, {-1 + u, v}}, {{u,v}, {u, -1 + v}}};
This can likely be cleaned up, and I’ll consider how a bit later, but this seems do what you want:
Table[{#[[ ;; ]]~Join~#[[{-1}]]} & /@ v2new // #[[j]] & // Table[{#[[;; -2]]~Join~{v1new[[i]] + #[[-1]]}} & @@ #, {i, Length@v1new}] &, {j, Length@v2new}] // Flatten[#, 1] & /@ # &
{{{{u, v}, {1 + u, v}, {2 + u, v}}, {{u, v}, {1 + u, v}, {1 + u, 1 + v}}, {{u, v}, {1 + u, v}, {u, v}}, {{u, v}, {1 + u, v}, {1 + u, -1 + v}}}, {{{u, v}, {u, 1 + v}, {1 + u, 1 + v}}, {{u, v}, {u, 1 + v}, {u, 2 + v}}, {{u, v}, {u, 1 + v}, {-1 + u, 1 + v}}, {{u, v}, {u, 1 + v}, {u, v}}}, {{{u, v}, {-1 + u, v}, {u, v}}, {{u, v}, {-1 + u, v}, {-1 + u, 1 + v}}, {{u, v}, {-1 + u, v}, {-2 + u, v}}, {{u, v}, {-1 + u, v}, {-1 + u, -1 + v}}}, {{{u, v}, {u, -1 + v}, {1 + u, -1 + v}}, {{u, v}, {u, -1 + v}, {u, v}}, {{u, v}, {u, -1 + v}, {-1 + u, -1 + v}}, {{u, v}, {u, -1 + v}, {u, -2 + v}}}}
Old answer with the initial definitions given:
v1 = {a, b};
v2 = {{{d, e}, {{g, h}, {r, s}}}, {j, k}};
This seems to do what you want:
v1+#&/@v2
{{{a+d,a+e},{{b+g,b+h},{b+r,b+s}}},{a+j,b+k}}
Map[v1 + # &]@v2
? $\endgroup$