It is not the error messages produced by yacc when you have a bug in your parser. It is the error messages produced by the compiler when the input program does not conform to the language specification. More useful error messages let users more rapidly diagnose the error in their program and fix it.
This means that the "error messages" complaint does not apply to someone who is only using lex and not yacc. Thus, when someone complains about "lex and yacc" and error messages, they are complaining about yacc. I often use flex without using yacc. I am not using it in compiler construction. Thus, according to UncleMeat's comment the "error message" complaints do not apply to flex if used without yacc, i.e,, if used for purposes other than compiler construction..
Complaining about error messages when using LALR is one thing. Constantly singling out "lex and yacc" (maybe because of some bad experience in a compilers course) is another. Yacc is not the first implementation of LALR, there are others, e.g., the lemon parser used in the SQLite Project. There is nothing LALR-specific about lex.