What we could do in this situation is to setup a Preview site. Although this sounds great you will say that well since only item in the last step of the workflow can be published, this will not really work... Well here comes the power of publishing Target.
You will need to setup a new Publishing Target "Preview":
You can see that on the new Publishing target item you can tick the checkbox: "Preview publishing target". By ticking this checkbox you are allowing items that are not in final state to be published there. That is awesome...
Now, you will need to setup a new database and a new entry in the connection string config
When setting up the new database, you will also need to add the following configuration for the Preview Database:
$(id) Images/database_web.png true publishing false 100MB 50MB 2500KB 50MB 2500KB
You can also setup a few config to ensure that search index will also be created for your new Target DB. Create a new config file on your App_config/Include/XXX folder. Call the file: XXX.ContentSearch.Lucene.Index.Preview.config. Copy the following there:
$(id) $(id) preview /sitecore
You can now define a new Site in your siteDefinition:
Finally ensure that you update the Sitecore.ContentSearch.DefaultConfigurations.config to add the new strategy:
preview true
Now the final spte is to ensure that the users you are editing the content is in a role that has write permission on the Publishing target item. This will make sure that your editor will see the target in the publishing window. This will also make sure that he can check or uncheck this target.
Now on the workflow step you will now see that when the page is in the Awaiting for approval, you will still be able to publish it to the Preview site: