Zend_Registryクラスは、どこででもデータをセットでき、その値をどこからでも参照できるグローバル変数みたいなものです。
非常に便利なので、Zend Frameworkのコンポーネント内でもよく使われています。
文字列や数値の他、オブジェクトやファイルポインタのようなリソースなどでも、名前空間が違っていても共有して使うことができて非常に便利です。
つまりPHPの定義済み$GLOBALSグローバル変数に似ています。
ではなぜ既存の$GLOBALS変数が利用できるのにあえてわざわざこのZend_Registryクラスを設けたのでしょうか?
私が思うに、以下のことが考えられます。
Zend Frameworkはコンポーネント同士の依存度が低いので特定のクラスだけをZF以外からライブラリ的に利用することができます。
このことによるZF以外のコードとZF内コード間のグローバル変数同士の競合・衝突を避けるためにZF内では独自のZend_Registryを使って競合することを防いでいる。
そんなところだろうと思います。
PHPにはグローバルに使える値としてその他にdefine()によるマクロ置換もありますが、当然のことながらこれは文字列定数および数値定数しか置換できません。
なので少なくともZF内コードでグローバルな変数を持ちたい時にはZend_Registryクラスを利用するのが手っ取り早くてスマートな方法になるでしょう。