Well, you technically don't need to have an individual sprite for each bullet. You could have a list of bullet objects with position vectors, and then draw the same bullet sprite at each location. I guess that'd save some memory at the expense of slightly more operations.
How do you know where your sprite is looking? If you're keeping track of that information with a vector, you can give your bullets a velocity vector based on that.