そのコードを見た感じ、dというのは「これまでに入力した最大の値」
ということでいいですか?
またeというのは「戻す」を実行したフラグで、
これが1の時は「戻す」を無効にする、ということでいいですか?
今回の質問の内容は、「戻す」を実行した時に、
dの値も前の状態に戻したいということでしょうか?
(おそらくそれを期待して『独立』なるものをさせたいのだと推察します)
だったら、値を入力した時にdの内容を別な変数に記憶させておき、
「戻す」を実行した時にdをその内容に戻せばいいと思いますが。
以下、これらのことを踏まえて改変してみましたが、これで良いでしょうか?
screen 0,1280,650,0,0,0
onkey *jump	//←*jumpの部分はサブルーチンという扱いではなくなったのだから、onkey gosubではなくただのonkeyにすべき
	b=0 : c=0 : d=0	//dはこれまでに入力した値の最大値
	d_old=0	//d_oldは値を入力する前のdの値
*start
	q=0
    w=q+20
	repeat
    circle q,180,-60,180-w
    circle 480,-60,480-w,q
    circle q,420,-60,420-w
    circle 870,-60,870-w,q
    color 0,0,0
    q=q+200
    if q>2000{
	    break}
    loop
    objsize 100
    pos 0,623
    a=0 : input a
    objsel stat
	if c>999 {
		z=20
		if c>9999{
			z+20
			if c>99999{
				z+20
			}
		}
	}
	font "MS Pゴシック", 180-z, 1 
	pos 500-(z/2),200+(1*z/3) 
	mes c
	if c>0 and b>0 {
		pos 500-(z/3),440+(1*z/3)
		mes c/b
	}
	if c<=0 and b<=0 {
		pos 500,440
		mes 0
	}
	font "MS Pゴシック", 180-(2*z/3), 1 
	pos 900-(z/2),200
	mes b
	pos 900-(z/2),440
	mes d
    stop
*jump
    if wparam=27 and e=0 and b>=1 {
	    dialog"戻しますか?",3
	    if stat=6 {
		    b=b-1
		    c=c-ac
		    e=e+1
		    d=d_old
		    cls
		    goto *start
		}
	}
    if wparam=13 {
		if a {	//aが0以外の時に以下を実行する
			objsel -1
			d_old=d	//dの値を記憶しておく
			if a>d : d=a	//最大値を更新
			b=b+1
			ac=a
		    c=c+a
		    e=0
		    r=9
		    cls
			goto *start
		}
	}
	stop