環境変数 PYTHONHASHSEED は Python がハッシュを作成するときのシードを指定します。ちょっと難しい概念で、環境変数と一緒に語るのも何なので、別に質問した方が良いと思います。
これを環境変数で指定する理由、つまり環境変数で指定することによるメリットのみ説明します。
前提 1. 環境変数は OS の管理下にあり、子プロセスに渡される
たとえば Windows や Linux のことを OS と言います。そして Python などユーザーが指定して OS から起動されたプログラムは**「プロセス」という実行環境**を作ります。プロセスを雑に言うと、あるプログラムと別のプログラムが同じメモリを互いに書き換えて暴走しないようプログラム毎に隔離された空間や、その空間で実行されているプログラムそのもののことです。
たとえば、Python を一度実行するとプロセスが一つ作られてその中で Python が動き、その処理中にもう一度 Python を実行するとプロセスがもう一つ作られて二つのプロセスが同時に動きます。
プロセスは子プロセスを作ることができます。例えばコマンドプロンプトやターミナルを立ち上げるとプロセスが一つ作られ、そこから Python を立ち上げると Python のプロセスが作られます。ターミナルから作られた Python のプロセスはターミナルの子プロセスと呼ばれます。
環境変数は OS によって管理される変数で、プロセスが一つできるたびに OS から環境変数の一覧が渡されます。そしてその環境変数は子プロセスへと引き継がれます。
たとえば Python でグローバル変数を作り、関数を呼ぶと、その関数からはグローバル変数を参照できますが、逆にその関数内部で作られた変数は関数の外から参照できません。このようなスコープがプロセス単位で環境変数にもあります。
前提 2. ターミナルの環境変数は Python から書き換えることができる
OS から渡された環境変数はプロセス内部で書き換えることができますが、書き換えた環境変数はプロセスの外の環境からは参照できません。子プロセスには親プロセスの書き換えた環境変数が渡されますが、子プロセスで書き換えたものは親プロセスからは参照できません。
さて、ターミナルを立ち上げると、ターミナルは環境変数を保持し、そこから立ち上がる子プロセスに自分の環境変数を渡します。
これはつまり、同じターミナルから立ち上げる限り、Python を何度起動しても同じターミナルの環境変数が渡されるということです。
ここで立ち上げられた Python が os.environ['PYTHONHASHSEED'] を設定すると、その親プロセス、つまりターミナルの環境変数を書き換えることができます。つまり、次にターミナルから立ち上げられるプロセスには、書き換え後の環境変数が渡されるということです。
環境変数を使うメリット 1 - コマンドライン引数や設定ファイルが不要
Python を数度立ち上げる場合、それはすべて別のプロセスになります。したがって、前回立ち上げられた時のことは忘れています。
それを再設定するため、コマンドライン引数で渡したり、設定ファイルに書いておいて起動時に読み込んだりします。
しかし、コマンドライン引数を実行のたびにいちいち指定するのは面倒ですし、設定ファイルだと編集するのが面倒です。その点環境変数なら、一度設定しておけばターミナルが生きている限り覚えていてくれるため、手軽に設定できます。
環境変数を使うメリット 2 - ターミナルを再起動すると忘れる
ずっと同じ値を使うのであれば設定ファイルが便利です。一度設定すれば書き換えない限りずっと使うことができます。しかし、その日の作業だけに使う一時的な値であれば、それを残す必要はありません。
一時的に環境変数を設定し、Python を何度か立ち上げて作業をし、作業が終わればターミナルを終了させることで消えてなくなるので、後になって不要になった設定ファイルに悩むことはありません。
環境変数を使うメリット 3 - 設定の手順が統一される
メリット 2 と反しますが、それでもその値を残しておく方が便利なことがあります。その場合は .rc などのターミナルの初期化ファイルに書いておけば、ターミナルを起動するたびに再設定することができます。
2 と合わせて、いつもはこの値を使うけれど今日だけはこの値を使う、のように使い分けることもできます。
環境変数を使うメリット 3 - 複数のプログラムで値を共有できる
通常はこれが主なメリットになります。それぞれのプログラムがそれぞれの設定ファイルを使っていたのでは連携に劣りますが、環境変数を使うことによって複数のプログラムが同じ値を参照することができ、連携を取りやすくなります。