Разница между eat и have a meal заключается в значении этих глаголов.
Eat означает «есть», «съедать». 1 Акцент делается на поглощении и пережёвывании пищи. 1
Have a meal означает «завтракать, обедать, ужинать» — полноценный приём пищи. 2 При использовании этого выражения акцент делается не на процессе поедания, а на самом факте приёма пищи, которому отводится определённое время и место в течение дня. 13
Таким образом, eat больше подходит для описания конкретного действия, а have a meal — для обозначения приёма пищи в целом.