I'm basically wanting to redraw the frame and its widgets. Should I actually just destroy it (if so how would I do that) or is what I've got good enough?
I imagine my current method will just keep on drawing over and over so when the frame is opened it will actually have many objects one over the top of eachother?
A frame once created, can be shown or hidden. It is always there, and cannot be destroyed, shown means the user will actually see it, while hidden means the user won't. In both cases, whether shown or hidden, the frame will still respond to registered events.
If you created a 2nd frame and hide the 1st, then all you would be exactly that. If you then create and show a 3rd frame and hide the 2nd, you will now have 2 hidden frames and 1 shown frame. This goes on until you run out of memory as more and more frames get created and WoW crashes. You want to avoid this by using the same frame by showing/hiding it.
If you just want one frame to display to the user, then create it directly outside of any function near the top of your addon, that ensures its available to the rest of your addon. No need to use a function to create the frame unless you actually want to delay the creation of the frame to a later time for a specific reason.