A note on the general solution: to many programs which require a filename you can give the path `/dev/stdout` (a link to `/proc/self/fd/1`, assuming said files exist) and they will happily send their output to `stdout`. One may also use process substitution in `bash` with `cat`, ie `foo -f >(cat) args | bar` (thanks, g-man).
Because `pico2wave` checks the file extension, a possible solution is to symlink `/dev/stdout` to a path with the appropriate extension, ideally somewhere such as `/var/local/`. This does create an extra file, but not per process: `ln -s /dev/stdout /var/local/pico2wave.wav`, then `pico2wave -w /var/local/pico2wave.wav "test" | aplay` works.