Event System
Currently, every node inside the running application receives events that are caught in the application loop (assuming the node is enabled, and not being projected). This means that with every node added to the application, events take longer and longer to iterate over every node, taking into account nested parents (which have even more overhead).
The solution may be to stop delivering events to child (or sibling) nodes as soon as the event is consumed. A similar rule could be applied with respect to the location of click events (won't be delivered to nodes unless the location is inside the node -- Not sure about this yet).
For nodes that require the ability to detect used events, it is likely that the node will have to create binds to the application instance so that the application explicitly delivers the used events (this handlers would not be present unless the node needs them, for example a focused node needs to know when the mouse is clicked off of the node). This method has some problems which need solving before it can be put to practice, mainly mouse events will lose parent nesting location changes when explicitly delivered. One solution could be to store the altered event locations for each parent in an easily index able table.
Another solution would be to track the event location for each parent, again storing them inside a table. However, this would change the method so that none of the nodes directly control the event shipping process. Instead, every event will be shipped from the Application instance, however the event will be passed to a handler function on the node so that it can make changes to the event (ie: ScrollContainer offsets) before being shipped to children.
This is being done in an effort to prevent events being shipped to nodes when they simply don't need them. Once the event has been used, to click a button for instance, the event can be discarded by almost every node (the exception being currently focused nodes, however even then they can be automatically unfocused via the root application). The biggest call for this change is node projection, which currently brings a lot of overhead to the application.