I briefly tested this, it looks very useful, and the different RequestHandlers make the code very modular, way to go!
One nitpick: I'd use "system.properties" instead of "properties", it's more precise.
And two suggestions related to XSLT transformations for presentation:
1) It'd be good to systematically include in the output XML the class name of the SolrRequestHandler used. XSLT transforms can then use this info to adapt themselves to the information being output.
2) It'd be good to name <lst> elements, as much as possible, also to allow XSLT transforms to adapt themselves to the content.
For example, using a NamedList instead of an ArralyList in the "Now show all the threads" loop in ThreadDumpRequestHandler:
NamedList<NamedList<Object>> lst = new NamedList<NamedList<Object>>();
for (ThreadInfo ti : tinfos)
lst.add( "thread", getThreadInfo( ti ) );
where the name="thread" attribute can be used to decide how to present the contents of the <lst> element.
Thinking about it, we might want to add a "datatype" attribute to these lists, to use when presenting them?
would help present all Thread info in a consistent way, no matter where it comes from.