NewSolution() will not expire the component it was called from, for that you need to call ExpireSolution(true) on the object. However if you keep starting new solution from within other solutions, you’ve basically made a never ending recursive call stack which will crash Rhino hard.
You can not start new solutions while you’re already running a solution. Nor can you change or expire components during solutions.
If you need to make modifications to components or parameters, then you need to do so after a solution finishes or before a solution starts. There are events that you can subscribe to (GH_Document.SolutionStart and GH_Document.SolutionEnd).
A better approach is to schedule a solution. You can do this any time you want, even during a solution. When a schedule exists, it will trigger a new solution some milliseconds after the previous one finishes. However before this happens you can get a callback via a delegate which will allow you to make all the changes you want.
A better approach still in cases like this is to write some code that executes completely separately from the GH_Document. That is what Galapagos does. It shows a new window and the code running in the window is in charge of changing sliders and triggering solutions. It means the code looks very much like what you have already, but because it isn’t executed as part of the GH_Document, it’s safe:
// Assign or modify data, perhaps even add or remove components and add/remove wires.