Como sugerido nos comentários, você pode evitar que o processo fique preso usando um tempo limite, por exemplo:
OUTPUT=$(lftp -u $USER,$PASS -p $PORT $HOST <<EOF
set net:timeout 5
set net:max-retries 2
set net:reconnect-interval-base 5
set ftp:ssl-allow no
mkdir $FTP_DIR
put $LOCAL_DIR/$LOCAL_FILE -o $FTP_DIR/$FTP_FILE
bye
EOF)
@Marki fez uma excelente sugestão em um comentário:
larger FTP scripts you may use Perl or similar, which would allow you to perform explicit error handling after each command.