I don't understand your code well enough to know what goes wrong exactly or how to solve it.
Accessing an object that is already deleted is undefined behavior, some things might work while others may not work. A crash is the most optimal scenario of things that can happen. Your code to create the buttons doesn't seem to access any members of the Settings class, only local variables and parameters, so no invalid memory is accessed. Maybe the code that creates the combo boxes does access something else. But a even if it doesn't, it is still wrong to access a reference to an object that no longer exists.
I don't know what you have in the Settings. If it doesn't need to store anything then its functions could be made static. Otherwise it could perhaps be a member variable of the MainMenu class instead of being a local variable in MainMenu::create, that way it will remain alive as long as the MainMenu exists. If it is a simple object that can be copied then the "&" in the lambda could also be replaced by a "=" to just copy it around.
Based on the way GuiFactory, Settings and Localization are created in those code snippets I would think static classes can be used there. But if the functions can be made static without any modification then of course there would be no reason for the crash you are experiencing.
Doesn't the debugger give some information about where the crash occurs? Getting a stacktrace when it crashes is extremely useful to figure out what goes wrong, otherwise I can only guess.