Good point. To be precise (as you noted), () [] ' , and ,@ are taken care of by mzscheme's read, but ~ : . and ! are handled afterwards in ssexpand (or its equivalent in ac.scm).
There are other bugs like those--pretty much any special syntax character on its own or in an incomplete way becomes an EOF.