Because parsing the command line seems easy, it is often not identified as a distinct function of the program. It never gets a functional specification, or a design, or even the considered attention of the programmer. As the program evolves, parsing features are added on an ad-hoc basis. The command line is parsed in open code, scattered across the program. The parsing code isn't contained in any subroutine, module, or class.
Different programs are liable to parse the command line in slightly different ways.
This confuses users. Features such as switch clustering, abbreviations, and help text, for example, may be omitted. When every program has its own parsing code, every program can have its own parsing bugs. You keep writing that same 50 lines of code, over and over again, in every program. The Eightfold Path In Perl, there is a better way.