How to restart game while keeping changes done? Alternative for Application.loadlevel.

What im trying to do is change the appearance/ skin of player gameobject by the animator controller. When the game is over, a store button appears which is made with ui panel and buttons. I made a script that when you click a buy button from the store it changes the controller animator to the appearence selected. The on click works fine, it changes the controller but the problem comes in when I hit the restart button which uses Application.loadlevel(Application.loadedlevel) to restart the game, it resets my animator to the previous one. Is there away to restart the game while keeping the changes done? I have already tried DontDestroyOnLoad and it seems to not be working, the gameobject stays with animator controller but its in the dead state and is not visible in the Main Camara.

Have you considered putting everything at its initial position instead of reloading the level?

I would suggest to preserve the game settings by creating session, through Singleton (create a class say GameSession and make it singleton), and loads setting from this session instead of setting values inside scripts.

For a basic example:

void Start()
{
    gameObject.GetComponent<SpriteRenderer>().color = Color.red;
}

instead use like:

void Start()
{
    gameObject.GetComponent<SpriteRenderer>().color = GameSession.sharedInstance.currentThemeColor;
}

This way if you changed your session variable, the scene will reload with a new currentThemeColor.