You mean you want an expression that is human-readable even when the order is a symbol? Here is an attempt:
poly[vars_List, a_, order_Integer /; order >= 0] :=
Module[{n = Length@vars, idx, z},
idx = Select[Tuples[Range[0, order], n], Total[#] <= order &];
Plus @@
Table[Subscript[a, Sequence @@ r] Times @@ (vars^r), {r, idx}]];
poly[vars_List /; Length[vars] > 2, a_, order_] :=
Inactive[Sum][
Inactive[Times][
Subscript[a, Subscript["i", 1], \[Ellipsis],
Subscript["i", Length[vars]]], vars[[1]]^
Subscript["i", 1], \[Ellipsis], vars[[-1]]^
Subscript["i", Length[vars]]],
0 <= Inactive[Plus][Subscript["i", 1], \[Ellipsis],
Subscript["i", Length[vars]]] <= order]
Try poly[{x, y, z, t}, a, n]