So hasher.combine(foo) is in fact just an alternative spelling for foo.hash(into: &hasher). They are completely equivalent. Choosing one or the other is a matter of aesthetic preference.
I personally prefer to use the generic combine, because it reads clearer to me. (I find that the inout argument makes hash(into:) rather noisy -- it's a sort of speed bump that makes my brain pause a bit whenever I see it.) This is why I left combine<H>(_:) in the proposal after we removed most of the other combine overloads. However, I can also see reasons for using hash(into:) directly, like Slava did in the WWDC session; after all, hasher.combine(_:) is one more thing you need to learn.
That said, while I do like combine(_:) better, I don't really like to use either form. I overwhelmingly prefer to just let the compiler implement hash(into:) for me automatically. I'd love to do that even more often!