You need to use array holding argument to _arguments:
_hello()
{
emulate -L zsh
local -a args_args
local prog
for prog in gcc make ; do
args_args+=(
"--with-${prog}[path to $prog]:executable:_files"
"--${prog}-options[$prog options]:string:"
)
done
_arguments $args_args
}