> For instance, if you write your own proof and then prove the program meets it, there could still be a logic error in your proof.
Sure. Even mathematics research journals sometimes publish erroneous proofs. Practical formal methods generally rely on automated provers.
You're right though that software development using formal methods can still have a non-zero number of defects. AdaCore use the term ultra-low-defect software rather than bug-free software. For an interesting case-study see [0].
Unfortunately, even automated provers can have bugs. To my knowledge, all provers suitable for practical use are not themselves formally verified. I don't think this is often an issue in practice, though. It remains that formal methods have an excellent real-world track record. The 'problems' with formal methods aren't effectiveness, but effort/price, and perhaps scalability.
> a web browser (probably the thing you'd most like to prove security-issue-free) can still overwrite its own memory through things like OS image and font code, JavaScript JITs generating code to an insecure ABI you don't have a model for, syscalls to kernel code that can write back into your memory, but not effectiveness.
If you verify only certain parts of a software solution, then sure, you don't get formal assurances about its overall behaviour.
> How do they "formally" audit it? Are they wearing suits?
That's an entirely different use of the word, isn't it?
[0] https://www.adacore.com/tokeneer See page 59 of the (freely available) full report for Analysis section