command_not_found_handle () {
    if [[ "$1" =~ [[:digit:]][d+-] ]]; then
        dice "$1"
        return $?
    elif [ -x /usr/lib/command-not-found ]; then
        /usr/lib/command-not-found -- "$1";
        return $?;
    else
        if [ -x /usr/share/command-not-found/command-not-found ]; then
            /usr/share/command-not-found/command-not-found -- "$1";
            return $?;
        else
            printf "%s: command not found\n" "$1" 1>&2;
            return 127;
        fi;
    fi
}

上記のように.bashrcでcommand_not_found_handle()を再定義して、特徴的な引数なら該当するプログラムに渡すようにしました。
オリジナルの関数をそのままコピーしてきて冒頭に処理を挟み込んだのですが、予めオリジナルの関数をcommand_not_found_handle_orig()みたいにリネームしておいて最後に呼び出せばよりスマートだと思いました。

command_not_found_handle () {
    if [[ "$1" =~ [[:digit:]][d+-] ]]; then
        dice "$1"
        return $?
    else
        command_not_found_handle_orig "$1"
    fi
}

自前で再定義せずに関数の名前だけ変える方法かtype command_not_found_handle | tail --lines=+3の出力を利用して関数を再定義する方法はありますでしょうか?