My suggestion would be to pass the command via stdin rather than trying to pass it using function argument(s) (which'll never work, for reasons people have already commented on).
Code:
$ cat example.sh
#!/bin/bash
CMDFILE=/tmp/commands.txt
store_command()
{
cat >> "$CMDFILE"
}
store_command <<-"EOD"
asillycommand -w "with quotes and such" -l 'woah! quotes!' *.input
EOD
$ ./example.sh
$ cat commands.txt
asillycommand -w "with quotes and such" -l 'woah! quotes!' *.input
$
Quoted "Here Documents" (as used above) pass their contents as literals with no quote removal, path expansion, or variable substitution applied.
Another option would be to base64 encode the string before you pass it as an argument and have the function decode it on the other side. But that's getting a little involved and using stdin is easier.
Personally though, for what it sounds like you're wanting to do, I'd just set a bunch of shell command aliases for frequently run commands instead of writing a front-end script like this, or maybe even leverage shell history functionality.