A nested structure field is the best option. Inside the nested structure, use a pages field.
See example here: How to control which parent menu items are shown?
The only downside is that you would have to define in advance how many levels your navigation should have.