Alright, everything you suggested works except for writing $DATE to .last_date. From bash, I can use the same command format (replacing $DATE with $(date +%d%b%y_%k.%M.%S), or just echo "asdfqwer1234blahblah" > .last_date), but it will not write $DATE to .last_date when the script is executed.
Code:
#!/bin/bash
read LASTDATE < .last_date
DATE=$(date +%d%b%y_%k.%M.%S)
cd /web/.hhome/mysql.backup/data
mysqldump -ubackup -ppassword --databases db1 db2 db3 > $DATE.backup.sql
gzip -9 $DATE.backup.sql
crypt asdfqwer1234 < $DATE.backup.sql.gz > $DATE.backup.sql.enc.gz
rm -rf $DATE.backup.sql.gz
ftp -inv ftp.somehost.com<<ENDFTP
user hoover90 password
del $LASTDATE.backup.sql.enc.gz
put $DATE.backup.sql.enc.gz
bye
ENDFTP
echo $DATE > .last_date