As far as I know, the PIC18 family can be USB devices but not USB hosts. It sounds like you are wanting to use the PIC as the host and the modem as the device - I don't know if you can do that using the firmware provided by MicroChip; there may be the appropriate libraries around, but I think at all use the PIC24 or PIC32 family devices to be embedded hosts.
That said, if you can send any character string through an interface then you should have no issue just because that character string is an AT-command. If the interfaces works at a byte level, then simply set up a pointer to the start of the string and pass a character at a time, updating the pointer until you reach the terminating null. If the interface has a library interface that allows you to pass a string, the simply pass the pointer to the start of the string to the library function. The only 'trick' I can think of is that some libraries require that you don't release the string buffer until after all of the characters have been sent which means it is up to you to place the characters into a static, global or some other type of memory that you know will stay around long enough (typically NOT a local variable within a function that you exist before the interface has sent the entire string).
Susan