Actually, you can pass filehandles between processes, it's just not something that solves many problems, and there usually are better ways to accomplish the same, as you outlined already. :-)
PPerl has code for passing around filehandles in pass_fd.c, and I wrote a replacement for that for Win32, but can't find it on RT. Maybe I forgot to open a bug for it.
This approach still leaves systems not so close to Unix in the rain of course, so your better, and common, approach of using accept still stands.