My goal is that the workflow is in the same state as it was when it was initially started.
You could achieve this with reset, by resetting to the first WorkflowTaskScheduled, or WorkflowTaskStarted events in your workflow history. The initial workflow inputs are recorded in the very first WorkflowExecutionStarted event so they would be reapplied on the workflow execution created by reset.
Which SDK are you using? Maybe instead of the “nuclear” option you could send a cancellation client request for the execution which would allow your to handle the it gracefully (and run compensation activities if needed).
Some samples below: