Причина eval в том, что когда вам это нужно, когда вам это действительно нужно, не существует заменителей. В конце концов, с диспетчеризацией творческих методов вы можете сделать так много, и в какой-то момент вам нужно выполнить произвольный код.
Тот факт, что у языка есть особенность, которая может быть опасной, не означает, что по своей сути это плохо. Когда язык предполагает знать больше, чем его пользователь, тогда возникают проблемы.
Я бы сказал, что когда вы находите язык программирования без опасности, вы находите тот, который не очень полезен.
Когда оправдано eval? С практической точки зрения, когда вы говорите, что это так. Если это ваша программа, а вы программист, вы устанавливаете параметры.