I would save each level as an array. Prior to running any level you would call a routine to set it up. Each time you complete a level you change the name of the array you will load on the next level set up.
So at the start or label you set up your variables, add in a level array.
dim level(10)
Then before you start your first level from your game start
level$="level1"
Then run your level set up
if file exist(level$)
load array level$,level(0)
endif
Then when you complete your level
level$="level2"
And so on.
level$="Level3"
You could use some code to inc a number and add it to the end of the file name instead of manually putting in level$="blah" all the time. That way you could hopefully have just one bit of code for all the levels.
To be honest you can do this with functions or gosubs just as easily. It's just these new programmers are used to functions these days, and they tend to blame the gosub command for all sorts of ills. As long as your code is correct gosubs are fine. I don't use goto though as it messes up the stack.
Anyway that's sort of the basics of how I would do it. I would try to get your game into one main loop rather than successive levels though.
http://s6.bitefight.org/c.php?uid=103081