You're exactly right; ES6 modules can solve this. Rollup (an ES6 bundler) has tree shaking [1] and also smaller bundle sizes in general [2].
[1]: http://rollupjs.org/ [2]: https://github.com/nolanlawson/rollup-comparison
[1]: http://rollupjs.org/ [2]: https://github.com/nolanlawson/rollup-comparison
And it looks like JSPM/SystemJS already has it integrated [1]! I'm wondering if there are any similar efforts in the Webpack ecosystem.