You can create subs in a Handler class and they can be called from the Handle sub. You can invoke a Handler class by sending a GET request or a POST request from HTML in the normal fashion. As for creating and managing events in a Handler class, I don't think this is a reliable scheme. Keep in mind that the Handler class will execute the Handle sub and once the Handle sub returns, it will pass out of scope (regardless of what thread it is in) and the instance will be garbage collected. The next time that Handler is invoked, a new instance will be created, not knowing anything about a previous instance (unless you stored state information in a global variable declared in Main). If you want a long-lived object that has a long-lived connection to the client, WebSockets is the way to go. They execute in their own thread, have their own event loops, etc...
I'm not sure what your third-party JavaScript is doing but if it's just downloading pictures, you can do this with GET requests on a static asset. You can use the ClientGetsString() method (or one like it) to send the relative URL of a picture you want the client to download and then inside that method, execute a GET request on that relative URL. Just make sure the picture is at the relative URL you're sending (it will be in your statics folder).
Otherwise, if there's some function inside ddphpalbum.js that is supposed to be executed, you could call that function directly from inside ClientGetsString(). Or you can call it directly from the WebSocket class. You can call any JavaScript method or execute any arbitrary JavaScript from within the WebSocket class.