Heya.
I'm not sure how much luck you're going to have trying to use a fifth slot like that. In the end, a lot of the functions that check for recipe matches are hard coded to only check for four items in the recipe, so there's probably going to be a lot of slight things you're going to have to change.
For example, the code that checks for a partial match specifically only checks for recipes that contain one less, and then two less ingredient items than the ingredients provided, because it is impossible for a recipe to only have one ingredient, a check for n-3 was not needed. But if you can provide 5 ingredients, a recipe with only two ingredients would never be partially matched because it would have 3 less ingredients than what was provided.
As for your second question, there is a new(ish?) feature that was added a couple of updates ago which you may find useful. The CraftingCompleteRunOnce plugin parameter located inside the result item list is a block of code that is run once when the item is crafted the first time. You can use this to track what you're looking for, and then edit the part of the function that turns it off after it's run once to make it happen every time the item is crafted instead.
That is located inside the Window_CraftingResult.prototype.callSuccessResult function. It starts on line 6550, and specifically line 6563 is what sets it to never run again after the first time $gameParty._craftingRunOnce[Ramza.CSParams.resultItem.indexOf(result[1])] = true . If you comment out this line, it should cause the code to run every time.
-Ramza