Why would they offer more notice than the law demands?
Perhaps they feel that the law doesn't demand enough to satisfy their sense of corporate ethics. Or perhaps they are trying to make their organization more attractive than their competitors'. Or perhaps it was influenced by large external players, such as a union and an important contractor/customer insisting upon such terms for one reason or another.
There are many possible reasons, but not enough context provided to know for certain which (if any) apply.
Presumably if they wanted to get rid of me straight away they would
have to pay me 3months salary to stay at home - or do American
companies typically just find some legal excuse to fire people eg.
minor violation of expenses or workplace policy ?
In general the first case would be the most likely. To do otherwise would leave the company in breach of the contract, which would allow the employee to sue for those three months worth of income (and possible additional punitive damages, depending upon state law and the exact circumstances).
Most companies would not bother looking for some minor technicality to use to avoid the three-month notice period. It's more likely that a company that really wants to pay out nothing will simply do so and hope that either 1) the employee will not bother taking them to court and/or 2) they will easily win any court case that ensues, by digging up or manufacturing a reason for terminating the employee if/when needed.
On my side I imagine I can't similarly pay them a months salary and
leave straight away.
No, you can simply leave straight away without paying them anything (unless your employment contract explicitly stipulates otherwise). Although of course doing so would be very unprofessional unless there was serious misconduct on behalf of the employer.
Technically you're in breach of contract in that case, but in no scenario does employment law allow a person to be forced to do something against their will. If you no longer intend to work there, that's pretty much the end of it. In essence all you really forfeit (apart from your professional reputation) is your pay for that final month. Note that your employer may decide to use any accrued leave entitlements that you have to account for your final month, which may or may not be legal depending upon locality and what is spelled out in the contract.
As in any case where a contract has been breached, a civil court case can be filed and nothing guarantees that won't happen. However, in order to collect in such a case an employer must prove damages. Which, unless they paid you for the month when you did not work and you refused to give that money back, would be very difficult to do (and not to mention costly and time-consuming in and of itself, and potentially damaging to the employer's reputation as well).