The short answer is that Graphene is focused on making Android more secure, while Lineage is more about making Android devices live longer. Graphene also makes upstream contributions when possible to get those security improvements to more people. Not sure how much Lineage does that.
Some things Graphene has introduced include sandboxed Google Play (install Google Play Services as user apps instead of system apps with special permissions), SeedVault Backup (now used by Lineage and others), memory hardening, and a lot more.
- GrapheneOS Features (worth skimming just the table of contents)
- GrapheneOS FAQ
Also, yes, you could accomplish everything with those two languages. Hell, you don't even need C. But for things where the relatively low level control of C isn't necessary, why shouldn't we use something that let's us focus on domain logic instead of preventing buffer overruns every few lines?