Dart2js needs to see all the libraries that are used. It performs tree-shaking to remove unused parts and then compiles the rest to JavaScript. By default dart2js produces one big JavaScript file, but it can cut your program on library boundaries that can be loaded lazily. This is still work in progress (only allows to split into 2 files so far) but looks promising.
The lazy loading needs to be done by the user before parts of the lazy library are used.
I don't see how event-handlers change the game. The html-library is a library like any other.