Yes, we should [support CAST AS VARCHAR for other sql_modes], but I am not sure how this would differ from CAST(... CHAR), except for a length check.
In particular, what should the result be for:
CREATE TABLE t1 SELECT CAST("A" AS VARCHAR(10));
Logically I assume this should create a VARCHAR(10) column, but can we really detect that in our current code without making this a special case?
(Maybe this will work automatically, but I can't test this just now)
The problem with special cases is how to handle expressions:
CONCAT(CAST("A" AS VARCHAR(10)), "")