I believe that there are 3 different options on re-rendering although I cannot remember the details. The one which should require the least overhead is AJAX.
AJAX can handle the opening and closing of nodes on the display fairly well. If you're actually changing the content of the tree from somewhere outside the hierarchy, you'd need to be a able to do a standard RichFaces reRender, which means supplying the requesting element with a unique
JSF ID(s) to be re-rendered. In the example I gave, that's a problem, since I'm only using a single sub-item and therefore the same ID would apply for all of its rendered levels. I think that if you defined levels more explicitly (with unique IDs) that might help.
It's likely to require some trial and error, and you may not be able to get what you want. Some complex structures are essentially atomic. For example, you cannot re-render a single row in a dataTable, you have to re-render the entire table.
The secret of how to be miserable is to constantly expect things are going to happen the way that they are "supposed" to happen.
You can have faith, which carries the understanding that you may be disappointed. Then there's being a willfully-blind idiot, which virtually guarantees it.