Nor can you integrate with the local filesystem, or call native APIs. With a hidden Java applet, it was pretty easy to make a full-fledged application that just happened to have a web-based API. That's getting a lot harder.
Chrome extensions have an API called Native Messaging which is roughly the postMessage API over stdin/stdout. It works, but isn't cross-browser. Alternatively, you can start up a local server and make XHR or WebSocket calls to localhost. However, both of those require the user going through an external install process. Maybe, in the current security landscape, that's the way it has to be, but it's kind of annoying.