Why are you surprised? Python is a very, very slow language. My very simple unoptimized C++ parsing code is more than 10x faster than Stem (parsing from memory). Go has some nice string parsing features, so zoossh should have an easy time to get fast and simple parsing code.
Because with either implementation (Stem or Zoossh) I expected disk IO to be the lion's share of the time. Both do lazy parsing so the earlier results didn't make sense. Being cached in memory this makes more sense.
One other thought is that the DocumentHandler.ENTRIES is telling Stem to read the content to provide you with individual RouterStatusEntry instances. If zoossh isn't parsing out individual entries then that may skew the comparison. Reading server descriptors would be a better test in this regard.
Cheers! -Damian