I think the specific thing stopping you from saying "has been staying" is not "already" but rather "this week."
"Three days this week" is a specific amount of time in the past, and you can't be staying (currently) at a time in the past. Because of that, we say "stayed."
Now, if the sentence were a bit more generic, then you could potentially use "has been staying" without problem. For example:
- He has been staying at work until after 10 o'clock a lot recently.
- He has been staying at work until after 10 o'clock three days a week for most of this quarter.
In either case, "has been staying" does not directly modify a specific period of time (where we could run into the same problem of the time being in the past), but rather a descriptive phrase: "a lot recently" or "for the last several weeks." The descriptive phrases describe an ongoing pattern of behavior but don't necessarily dictate the exact number of times Tom stayed late. Because of that, we could use "has been staying." Although, "has stayed" would work just fine in either of those two examples as well.