You will never use OnGUI when working with NGUI. Never.
When you need to update some text, you would do it when you need it updated. OnGUI runs several times per frame. There is absolutely no need to update text several times per frame.
For example, when your unit gets damaged, you can change its health by simply accessing its label component and setting its value right then and there:
unitHUD.GetComponent<UILabel>().text = someFloatValue + "%";
In your case, create a prefab out of what a single row should look like in your leaderboard, then create a script that will reference all the important fields -- such as player name, player score, etc. This script will go on the prefab.
When you open your window, you need to populate its content by instantiating your score item prefab several times (as many times as you have entries). GetComponent<YourCustomClass>(), then set its values, such as
YourCustomClass mine = instantiatedObject.GetComponent<YourCustomClass>();
mine.playerName.text = "Some Player";
mine.playerScore.text = "12345";