Figured it out on my own. The trick is to use DelegateModel, Repeater and Row/Column layouts, not TreeView.
Create a component which will show your current node using DelegateModel.
Use a Repeater to create children - let the component dynamically create another instance of itself, assign the current node as the rootIndex of newly constructed DelegateModel, and set it as the model for the Repeater.
By properly using layouts, you can position your nodes exactly as in the attached image.
Email codedump link for QML tree view from a model