There are 2 to 3 ways i can think of:
1.Group components based on functionalities and create pages accordingly and handle navigation between VF pages
2.In a single container component have the child components inside aura:if and then use the if condition to open up visibility based on the wizard or functionality step
3.Using dynamic component creation and destruction based on your criteria
$A.get("e.force:navigateToComponent") doesnt work because it looks up the one.app and in lightning out scenario the container is VF.
In one of our use cases we had the same scenario(Navigator back), what we did was to logically segregate the components based on pages and navigation would be triggered based on that.
It also a user training thing if users are given navigation options within the page like left hand side tab/menu they should click that to goto the previous sections.
There isn't a fool proof way to control browser back button so its better not to go that way.
My personal preference would be a combination of 1st and second approach. Logical segregation and within the page use aura:if to conditionally show hide.
we can also store the section name which will map to a component in the segregation and store it in the back-end SF object and if users land on the page again we can directly open up that section using aura:if based on the value stored in the backend.