как всегда - сам спросил - сам ответил )
luaL_requiref(LUA_state, "io", luaopen_io, 1);
//luaopen_io(LUA_state);
вот так работает
The particular problem here is that luaopen_io does not store the module table in _G, hence the complaint that io is a nil value. Take a look at the source code for luaL_requiref in lauxlib.c if you want to know the gory details.