OK, posted SpellTargetLib this time.
I see no reason to not use create, considering it is how people usually get an instance of a struct. It is not that confusing that you can't destroy instances because you get an error message if you try to.
I don't repeat that block of code twice. It's getting both the caster/ordered unit and target coordinates though, so it looks repetitive.
It doesn't keep handle indexes hostage. It grabs all the information about the location, stores it, and destroys it in the create method.