they function differently, present information differently, guis are reactive, have more options to express complex information, but are very limited in non-interactive, or learnt, usage (as usage is often reactive too, clicking buttons isn't exactly great for power usage)
clis are predictable, scriptable, once you know their interface you can very easily use them with your eyes closed -- but they're often static and one dimensional, great for scripting, not as good for displaying live/changing or complex info
imo a good system has to have both good guis and good clis -- note that tui programs fall into guis mostly and don't share much with clis except by being ran in a terminal, i don't like tuis as a concept very much