Hi Richard.
> I would really like it if you could have some control over the order
> of terms in a polynomial by using some external package which could be
> loaded when needed.
I don't think that needs an extra package. All you need to do is keep
the core simplifier from reordering terms. Perhaps the following
is able to give you some ideas, how to do that. The important
part ist the "simp:false" statement - but be careful, maxima heavily
depends on it's core simplifier...
myprint(expr, pred):=block([simp:false],
print(apply("+", sort(subst("[", "+", expr), pred))));
(%i31) expr:y+x^2+x+b+a;
(%i32) myprint(expr, lambda([u,v], orderlessp(u,v)))$
a+b+x+x^2+y
(%i33) myprint(expr, lambda([u,v], orderlessp(v,u)))$
y+x^2+x+b+a
(%o34) mypred(x,y):=if atom(x) and not atom(y) then true
else (if not atom(x) and atom(y) then false
else orderlessp(x,y))
(%i35) myprint(expr, mypred)$
a+b+x+y+x^2
Of course you can invent any other predicate you like...
HTH,
Harald