J2EE doesn't actually assume that the only way to do servlets is via an HTTP server. The GenericServlet is the base class for any sort of server that works in a request/response paradigm. For example, long before
Java was invented, IBM had a lightweight interactive application system called CICS. Actually, still, has, but back before PCs, TCP/IP, HTTP and the entire Internet, you needed something like that or be stuck juggling tapes and punched
cards.
So GenericServlet could be used as a base class for a CICS application. And for all I know, it has been, although I got out of the mainframe-only world before Java came along, so I'm no longer in touch with IBM-specific products.
For webapps, you'l almost always want to use HttpServlet, since it affords the extra amenities that HTTP has to offer.
Note that this isn't the only case where Sun has distanced itself from specific frameworks. JavaServer Faces was also designed with the idea that HTML would not be the only possible form framework. And in fact, back then, WAP was used on many phones. Only when smartphones became the norm did WAP get pushed aside by HTML/CSS/JavaScript.