I had the same problem several years ago and then I made my own Imhof program using python and numeric. The trick is to select a range of altitudes and apply a linear color palette. At the end you must combine the different results. This is a fragment of my code (very simplified)
abajos = nrange(dtm, 0,500)
amedias = nrange(dtm, 499, 4000)
amaximas = where (dtm > 4000, dtm, 0)
abajos_i = convert.num2img(abajosbin)
abajos_ic = ImageOps.colorize(abajos_i, (147, 160, 150),(215, 210, 188))
amedias_i = convert.num2img(amediasbin)
amedias_ic = ImageOps.colorize(amedias_i, (215, 210, 188), (206, 187, 173))
amaximas_i = convert.num2img(amaximasbin)
amaximas_ic = ImageOps.colorize(amaximas_i, (206, 187, 173), (255,255,255))
ImageOps is part of the python Image package.
Conversion from tiff (16b) to numeric was mad using pynumeric (I think, not remember very well).
The tuples like (147, 160, 150),(215, 210, 188) means from which color to what color I want my color ramp and those RGB reflects Imhof paleete.
The result is a DTM with a very detailed Imhof palette, far more than 256 colors.
If somebody wants to make a Imhof plugin I am very pleased to pass the code.