- update() is called every frame (in theory) in order to process input and stuff that you need every frame
- refresh() can be considered update-on-demand and it also handled drawing on the Bitmaps within windows (since drawing is expensive)
To get more technically, the main() method within a scene is the main loop, it calls its own update() method in a loop then (and does rendering through "Graphics.update"). Within its update() method it usually calls the windows' update() methods. If there are more windows, sometimes some of them aren't visible at the time so it doesn't update them during that time. refresh() is usually only called when some display data needs to be changed in the window, e.g. the HP display changes so the Bitmap object contained within the window needs to be changed.
I can't think of a tutorial right now, but a good idea is that you just go ahead and try to edit the existing menu code (make a backup first!) and just see what happens. The menu code isn't that complicated and now that you know the basics, it should be relatively straightforward to understand what's going on.