なぜか納得してるようだが、これで納得できるはずがないので勝手に説明するわ

まず基本(?)系。thenを二回続けているが、asyncFunction()は
一回しか読んでないパターン

asyncFunction()
 .then(function (value) {
  console.log(value); // => 'Async Hello world' ・・・(1)
 }).then(function (value) {
  console.log(value); // => undefined ・・・(2)
 });


(2)でundefinedになっているのは、1回目のthenで何もreturnしてないから
JavaScriptは関数で何もreturnしてない場合はundefiendになる
(Rubyなどのように最後に評価された値ではない)

次のように、thenでreturnすれば次のthenの関数の引数に渡すことができる

asyncFunction()
 .then(function (value) {
  console.log(value); // => 'Async Hello world' ・・・(1)
  return value;
 }).then(function (value) {
  console.log(value); // => 'Async Hello world' ・・・(2)
  return value;
 });