The simple fix was:
- TreeView: set Fixed Height Mode to No
- TreeViewColumn: set Sizing to Automatic or Grow Only
With single-column views, the column resizes to fit its contents and scrollbars appear if the contents don't fit.
With multiple-column views, the columns will get an initial width and the scrollbars will appear if they don't fit.
It's less than obvious that "fixed height mode" for a treeview would mean "fixed width mode" for its columns, but that seems to be the case.
Alternately, the columns could be given fixed widths that exceed the width of the ScrolledWindow, but this was about showing scrollbars as-needed.