A Var that doesn't contain a value, but a pointer is for example needed if you want to add a digits element to a panel. There you need to give a Var pointer to the engine - to ensure that the value is displayed in the panel that the Var object in C# has. Without a pointer in the Var it also wouldn't be able to display the current time in a panel - you would have to update the time every frame, with pointers you don't have to worry about this.
The scheduler i wrote created a thread for every function that was called by the engine (for example a function one gives as parameter if you create a ENTITY object). After an engine_frame it started to stop the current thread and started a thread in the list, after that thread ended or reached a wait, the current thread was stopped and the next thread in a list was started ... But in the end it was just too slow to be usefull ^^
The difference between calling functions every frame and a scheduler is afaik, that if you have a scheduler you can use wait, and thus, when the function's turn has come, it doesn't need to go through the whole function, but may start after the wait command.