Calling it a shortcoming is a bit much don’t you think? The strings in the language file are mostly simple default messages for your convenience, they are not templates.
However, if you must,.. have a look at line 202 in eform.inc.php and adjust at your leisure
$vMsg[count($vMsg)]=$desc . $_lang["ef_invalid_email"];
You could for instance change it to:
$vMsg[count($vMsg)] = isset($fld[4]) ? $fld[4] : $desc . $_lang["ef_invalid_email"];
in which case the error message would be taken from the eform attribute of the field if that was set. That would be an improvement I’d be inclined to add to the code , although it probably doesn’t do what you want.
Alternatively change it to
$vMsg[count($vMsg)]= str_replace('[+desc+]', $desc, $_lang["ef_invalid_email"]);
and make your language string something like
$_lang["ef_invalid_email"] = "<div class='error'>[+desc+] is not a valid email address.</div>";