Cairo has stroke() which deletes the path after stroking and stroke_preserve() which does not touch the path and leaves it as-is.
I don't really know if appendPath() is faster than re-creating the path directly, but I really cannot imagine that something like this should be a performance issue. It likely depends on your paths anyway and you should just benchmark this yourself.