Special variableは、初期値を設定せずに、(symbol-value foo)として、
いきなり参照すると、unbound-variableエラーになりますが、
この動作に、歴史的な経緯や、理屈はあるのでしょうか。

エラーにせずに、(car 'nil) => nil みたいにとりあえずnilを返す仕様の方が
便利な気がします。