Pretty sure the US 6th gen Civic Si had the B16A(2?), not a D series. And, in my opinion, that's pretty darn good economy if it is in fact a B16. It's an undersquare engine (very short stroke, large bore), with a lot of internal friction. The transmission is incredibly short (making pulse & glide essential), and though they're incredibly stout engines, they're not particularly thermally efficient, at least compared with a D series or even later K series.
As California98Civic says, a vacuum gauge (or better yet, an OBD II dongle + the Torque app) could be valuable. Generally speaking, higher loads are more efficient, but above a certain point (maybe 75-80% load, 20-25% vacuum) the engine starts to pull ignition timing and run at a richer air/fuel ratio, which really kills fuel economy. With proper instrumentation you can likely increase your numbers a lot.
Something like
this should work for you.
EDIT: A Scangauge may need calibration, which could be why it's off, but they also don't take air/fuel ratios into account when calculating economy. If the engine is running rich when you pulse & glide, your fuel economy is going to be lower than it reads.
If you have access to being able to swap the transmission, the B18B (Integra LS) transmission could give a pretty serious improvement. They're pretty cheap, and it's reversible.