There's a few things you can do to harden the process - I went through the same growing pains with my purchase requisitions.
Protect the form - create an InfoPath column called "Status" and promote it to SP - hide it from the view.
In your SP workflow, set the Status to "ReadOnly" or "Edit" - depending on your requirements.
In InfoPath - on form load check the Status name - if ReadOnly switch to another form view that removes Submit button and all fields are readonly.
For document numbering, this was a real brain-teaser and I called on a few other articles to help. Basically - you want to create a counter in your SharePoint table.
I created a numbering system that changed by the date. E.g. 20140825-01, 02, 03 etc (and resets to 01 on the change of a day/month or year) - This required 4 SP columns of data and an InfoPath field.
1. CalcYear - SPColumn - Calculation based = CONCATENATE(YEAR(Modified)) - gives me 2014
2. CalcMonth - same =CONCATENATE(REPT("0",2-LEN(MONTH(Modified))),MONTH(Modified)) - gives me 08 for August (not just 8)
3. CalcDAY - same =CONCATENATE(REPT("0",2-LEN(DAY(Modified))),DAY(Modified)) - gives me 25, again formatted to be 01 for single digit days
4. IndexValue = InfoPath field, single line of text
5. NextIndex = SPColumn = Formula Based = CONCATENATE(REPT("0",2-LEN(IndexValue+1)),IndexValue+1) - this gives me the 2-digit 01,02,03)
Now on InfoPath - my IndexValue field does a data retrieve to get NextIndex[last()] for the default value.
I need to check if a post is happening on the same day (if so increment by 01), or reset the counter.
I do this by comparing the last post in SP, and the current date (Field called PostDate = function "today()" on the InfoPath form) and use a function:
NextNumber = concat(substring(IndexValue, 1, (contains(LastPostDate, PostDate)) * string-length(IndexValue)), substring("01", 1, (not(contains(LastPostDate, PostDate))) * string-length("01")))
Note you may have to do some formatting to ensure they both look the same "MM-dd-yyyy"
I also get rid of the InfoPath form submit button (and remove it from all views and permissions) and create my own custom submit button with rules - it will:
Validate the fields
Set the Status column to ReadOnly
Calculate the Document Number based on the above - important to create the number on POST, to avoid conflicts with multiple users.
=concat("REQ-", "-", translate(PostDate, "-", ""), "-", NextNumber) - gives me REQ-20140825-01,02,03, then REQ-20140826-01,02...
Post the document to SP
It's a lot to digest in a short forum post, but here is an article that may help you where my descriptions fail:
http://dlairman.wordpress.com/2011/01/10/add-a-unique-auto-incrementing-column-to-a-sharepoint-list/
Cheers
Steve