◆ JSON の base64 化で日本語がおかしくなる
◆ 日本語を含むなら encoding は none にして自力で encode する

hapi では server.state で cookie を管理できます
encoding に base64json を指定すれば JSON 化して base64 変換した値を書き込むのでオブジェクトを保存することもできます
サーバサイドのセッションではないのでユーザが書き換えたらまずいものはセットしたらダメです

便利な機能なのですが base64 変換というと日本語ってどうなるんだろう?と疑問に思いました
早速試してみると

server.state("data", { isSecure: false, encoding: "base64json" })

h.response("ok").state("data", {a:"あいう", b: "日本語"})

JSON.parse(atob("eyJhIjoiQkRGIiwiYiI6IuUsniJ9"))
// {a: "BDF", b: "å,"}

おかしな値になってます
マルチバイト文字対応してないみたいですね
JSON 化したあとに自分で変換するのはできなそうなので encoding は none にして自力でやったほうがいいかもしれません
cookie なら base64 じゃなく escape で十分だと思うので

// encoding: "none"

h.response("ok").state("data", escape(JSON.stringify({a: "あいう", b: "日本語"})))

と言う感じです