There is another Reason, which hasn' come up before: When I want to write a program that is a shell script and a perl script too (,and a python script and c-shell ... you get the picture)(yes I have done it. 6 languages last I counted) you want to have the possibility to use a variable before declaration because the declaration would be an invalid command in the other language.
Why I would do this? I like database-definition files. Executed by sh they create a database. Required they give a connection to that database. Or what about a maintainancescript that works whatever interpreter is installed?