Originally C3 was merely an extension of C2 - which was largely a streamlined C syntax + modules + struct methods. BUT C2 introduced `func` as a function prefix, plus `type Foo struct { ... }` for type declarations to simplify parsing.
So C3 inherited that, but scaled back on the divergence from C, making struct declarations the more familiar `struct Foo { ... }`. The `func` felt too heavy, so it was later reduced to `fn`.
But couldn't that "fn" also be removed? It seemed as if the grammar would allow that while keeping the grammar simple.
However, there were arguments against:
(1) `fn` was also used as a keyword for defining lambdas and function pointers in a straightforward way.
(2) it is symmetric with macro definition: `macro int foo(x) { ... }` and `fn int foo(x) { ... }`
(3) it makes it trivial to search for functions using regex or even plain text search.
While some people wanted it removed, there were a lot more who argued for keeping it esp for that last reason.
I don't really have a personal preference, but it is helpful to keep some additional simplification to the grammar to allow further modifications or additions.