64です。

liolib.cをみたら、g_write()の中で
if (lua_type(L, arg) == LUA_TNUMBER) {
/* optimization: could be done exactly as for strings */
status = status &&
fprintf(f, LUA_NUMBER_FMT, lua_tonumber(L, arg)) > 0;
}

な事してるので文字にしちゃうんですね。バイナリで書き出すのはやめときます。