If a program is expecting to read it's input from a file then that's pretty much what you're going to have to do. To avoid touching the file system, all the programs you are using have to understand how to read from stdin and write to stdout (or some other device that's not a file system).
Many programs in the unix universe are capable of reading from and writing to std{in,out} just as easily as they are to a file. A good example is gnu tar and gzip. It's possible for tar to write to stdout and to pipe that output directly into gzip:
tar cf - foo/ | gzip -c > foo.tgz
but that requires both tar and gzip to be able to read/write to stdin/stdout as well as regular files.
How you achieve this in your own program depends on the language involved but in most cases handling stdout & stderr is pretty much the same as any other file. Your command line arguments should allow the user to choose this as an option.