for...of is more flexible. While forEach is a method on Array.prototype, for...of is a consistent syntax that can be used in more places.
For instance, iterables:
function *myIterable (v) {
while(--v) yield v
}
let launchCountdown = myIterable(60)
for (let i of launchCountdown)
console.log(`t minus ${i} seconds`)
So in effect arrays can be thought of as iterables in ES6. So IMHO it allows for more consistent behavior with the way iterators in other languages like Java and C++