Keep a list of strings that are currently displayed at the screen. These are the strings already typed.
When you need to draw the type writer area, just dump these on the screen. (It depends a bit on your gui system whether you actually need this.)
You also need an index to the string where you are "typing", that is, where the next character will be added. Since it's always at the end of the string, just knowing which string to append to, is sufficient.
The above is sort of your piece of paper in the type writer.
The second thing you need is a buffer with "text to write". A list of strings will probably suffice at first. When you want to output some text, just append it at the end of the buffer.
That way, your program can just dump output to the buffer and continue.
Now all that remains is a mechanism to slowly move letter from the output buffer to the 'paper'. The standard trick for that is using a timer. Most gui systems can give you a call when an amount of time has passed. Use that to move a letter, then reset the timer, so it fires again after a while for the next letter, and so on.
There are lots of variations on this, for example, you can merge the paper strings and the buffer strings, and only print text to the screen upto the point where the type writer is. (This is where substring(0, n) comes in, by frob.) Merging both buffers also has the advantage you don't actually copy letters from one buffer to the other, just advance the type writer position, and redraw the screen.
Once you have a basic system running, play with it, and reread the "extra features" pointed out by frob, they likely make much more sense then :)