The only way that (3) could be described in the representation that AMPL sends to solvers would be to implement h(x) as a user-defined C function, which itself would invoke an AMPL process at each call to solve the linear program (2). That would be quite a stretch of AMPL's user-defined function technology, however, and might be too inefficient.
As an alternative you could use an AMPL API to program the interaction between AMPL and a nonlinear solver. Depending how the solver is set up, you might alternate between making calls through the AMPL API to solve the linear program, and making calls to a nonlinear solver's API to determine a new iterate; or your program might receive callbacks from a nonlinear solver and use the AMPL API to solve the LP the function values that are returned. Currently there are APIs for Java and MATLAB (http://ampl.com/products/api/) and one for C++ will be released very soon now.
Bob Fourer
am...@googlegroups.com