There's often a huge difference between working software and complete software.
In agile, nothing is ever really complete, and working software doesn't have to be fully finished to bring value to the end user.
A lot of time in agile, you're not going to complete a whole piece of functionality within a sprint. By incrementally delivering working software, end users have the ability to provide more regular feedback, which will allow the development team to make necessary changes without building unnecessary features and functionality.