2 & 3 are aspects of the same thing - the menu feature. You can, of course, have multiple menu’s not just “main”. I think most theme’s use “main” as the site navigation menu.
I use a combination of 2 & 3. Using 2 for global settings and 3 for local overrides.
These are the only methods that use the Hugo-native menu feature.
Using your option 2 i.e. menu in site config gives you a quick way to start using menus. It’s also used to configure the menu weights, etc.
Using your option 3 i.e. menu in front-matter gives you a finer control on which post should go to which (could be multiple) menu(s). You also need to use the site config (option 2) though if you want to assign menu weights.
I use option 3 exclusively as I don’t like to clutter my site config with “content stuff” like menus. And I get around the “not setting of menu weights in site config” by naming my menus with numerical prefixes (as the default sort of menus is alphanumerical if weights are not specified)… and then I remove those prefixes in my layout.