simplify



Sure, you can write a program which tries one thing and another in some 
brute-force way.

There's nothing to prevent people from writing such a program in Maxima 
except for
the two items you already mentioned.

1. You will probably end up with a brute force  method which could take 
a long time to run on exactly the kinds of expressions for which it 
matters: large ones.
I am assuming that you need to partition subexpressions e.g. 
a+b+c+d+e...+z  -->   simplify(a+c+d+..) + simplify(b+e+ ...) + ...  
Or do other combinatorial rearrangements.   If you just call ratsimp()  
or factor() or radcan(), then that's not cheap either, but it is not as 
effective.
(e.g. factorsum).  

2. You need to have some way of terminating the search, or deciding 
which possible result is best.

You could give hints, like functions to include in the answer, functions 
to exclude from the answer, how to evaluate complexity, assumptions to use.
Mathematica and Maple do things like this. Check their documentation.

Your draft of a simplify program looks like a good start.

RJF