Your process (called $$) has a "Current directory", ~/Downloads.
When you ./cd-backward, that Bash script is run in its own process, which has its own "Current Directory", which starts off as ~/Downloads.
The cd .. affects the "Current Directory" of the ./cd-backward process, changing it to ~, but NOT affecting the "Current Directory" of your original process.
./cd-backward finishes, its process exits, and the cd .. is forgotten about.
Here are two ways I affect my own "Current Directory", kept in my '~/.bashrc`:
First, a couple of aliases:
alias ..='cd ..'
alias ...='cd .. ; cd ..'
Here's how I keep my current directory in my Window title (through intercepting cd):
# from the "xttitle(1)" man page - put info in window title
update_title()
{
[[ $TERM = xterm ]] || [[ $TERM = xterm-color ]] && xttitle "[$$] ${USER}@${HOSTNAME}:$PWD"
}
cd()
{
[[ -z "$*" ]] && builtin cd $HOME
[[ -n "$*" ]] && builtin cd "$*"
update_title
}