a buffer is basically just a region of memory that stores PCM data. a source plays back these buffers. you can have multiple buffers queued in a source
with openal i believe you have to manually remember to dequeue the buffers, which means you have to add it in your update loop. that's ultimately the reason i replaced openal with my own library, because mine doesn't require an update loop at all to dequeue buffers, it just requires a callback
reuse a source? sources are inherently reusable. just tell it to play a buffer instead of queueing one and it will replace all the queued data and start playing whatever you tell it to