I think that the single biggest reason is because of the idiom under which many scripts/unix-like programs are written is this: accept files (or pipes) for input, either by named files/named pipes in the command line or as stdin. Likewise, they quite typicall use STDOUT for their output (not for prompting users questions and such), although they will often have some sort of switch that allows you to name the file(s) for output. Any reporting is typically done to STDERR, so that pipelines and/or output data files are not clogged up/confused with miscelanious reporting.
The fact that many, many things behave this way, tends to make people implement other things in a compatible fashion... even if they are not something that is reading in files and/or writing out files.
Anyway, you ask why, and I think that's a pretty big part of why.
update (addition): I meant to point out: perl, itself, supports this mode of thinking very much so, by way of its -n and -p switches, and it's "diamond operator" <>, which all implicitly iterate over opening and reading from files in @ARGV or reading from STDIN if @ARGV is empty.
Not an editor command: Wq