1) Das war schon immer so, so lange ich damit herumprobiere. Verschiedene Lösungen sind möglich. Genauer kann ich das leider nicht sagen, weil ich die Methoden der einzelnen Klassen nicht im Kopf habe. Ohne Webserver.h ist alles etwas umständlicher. Da musst Du dann mit client.read() Zeichen einzeln lesen und alles selber zerlegen, was da ankommt. Webserver.h macht es einfacher.
2) gar nicht unter ein Dach. Die erste Lösung brauchst Du nicht, ich würde die Zweite bevorzugen.
Wie ich schon schrieb:
Alles was Du brauchst, bekommst Du über die Webserver-Klasse. Query-String auswerten(.on() ... Handler, falls Daten vorhanden), Daten senden (.send()) und empfangen (.handleClient()).
und auch um Argumente aus dem Query-String zu bekommen: .hasArg() und .arg().

MfG