This is actually simply doable by an x/y variable per event (as long as you don't have more events than you do available variables).
All you'd need to do is set it so that when you leave your town, lets call it Nooblocity, and go to the level, lets call it Pwnsage Fields, in that teleport event you take every last one of the events x/y positions. When you step onto the teleport event to go back to the town, it'll then replace their "starting" x/y with this new x/y, thus making them remember their last location. The beauty of it is it's simple, the bad part is if you have a few hundred events on one map (hah, I highly doubt you will, but just saying!), you'll have to have two times that value in variables to handle all of them. My suggestion would be name the variables something like this syntax:
0001:{EVENT_NAME1}_X
0002:{EVENT_NAME1}_Y
0003:{EVENT_NAME2}_X
0004:{EVENT_NAME2}_Y
with {EVENT_NAME#} being the name of said event (best you actually name them, as well. That makes dumping the X/Y easier). This'll also be a permanent solution, saving those positions for not only the length of the game, but as well when you save/exit the game. You can even set up an extra common event doing the same thing which'll move the events back to where they were after they moved when you reload (last I remember, when you load in a map and they've moved, they reset back). Obviously, scripts are a little more quick than common events, but in some situations the common event is the easy route.