Schaffhausen is lovely. We wandered around there for an afternoon/evening while we were staying on the other side of the lake for 10 days. However, it's in Switzerland, which doubles the costs, it's got some pretty steep hills, and it's all paved city. The German side of the lake is equally beautiful, and they could stay right on the water. Lindau is gorgeous. The kids might enjoy the zeppelin museum in Friedrichshafen, or the outdoor prehistoric village recreation in the lakebed at Unteruhldingen. Or a ferry ride out to Mainau for a good run around the garden island. None of those activities would take much over an hour and would give them some good outdoors time to blow off steam after a long train ride.
One other town we really liked was Überlingen. It is a very pretty old town with lots of the medieval wall and towers remaining. It also sits on the lakeside. My kids were teenagers already, but they enjoyed the playground, the walk along the lake and along the walls. We had one of our best meals of the trip there, but it was Swiss, and your family is heading into Switzerland, so they may not be interested. It is called Wirtshaus zum Gundele, located at Hafenstraße 15 in the Überlinger Altstadt.
As you speak German, you can help your son avoid confusion between Uhldingen/Oberuhldingen/Unteruhldingen/Überlingen and I'm sure I've forgotten some ;)