Let me be honest about the motivation: I run BGP in my homelab partly because it is genuinely useful and partly because it is the sort of thing you can't say out loud at work without someone raising an eyebrow. Both are valid reasons. The eyebrow is, in fact, the point.
The useful half is real, though. I have a couple of hosts running services in containers, and I wanted those services to have stable, routable addresses that move with the service rather than the host. Static routes work until you move a service, at which point you are editing the router by hand and inevitably forgetting. So instead, each host advertises the addresses for the services it is currently running, and the router learns them dynamically.
I use FRR on the hosts and on the router, which on my setup is just Linux. Each host gets a private ASN, the router gets another, and they peer. The host advertises a small block, the router installs the route, and when a service moves to another host the advertisement moves with it. No static config to forget.
The config is less frightening than its reputation. On a host it is roughly this:
router bgp 65010
neighbor 10.0.0.1 remote-as 65000
address-family ipv4 unicast
network 10.10.5.0/24
exit-address-family
The network statement advertises the service block. The host runs the service on an address in that range, FRR tells the router "I can reach 10.10.5.0/24", and that's the whole trick. When I want a service to fail over, the new host advertises the same block and BGP sorts out the rest, preferring whichever path is up.
A couple of things I got wrong on the way, so you don't have to. The first was hold timers: the defaults are ninety seconds, which is an age when you are sat there willing a route to withdraw after killing a process. I pulled them down so failover happens in single-digit seconds, which on a quiet home LAN is perfectly safe. The second was forgetting that the host has to actually own the service address for the advertisement to mean anything. An advertised route to a block where nothing answers is just a more sophisticated way to blackhole your own traffic, and I did exactly that for an afternoon before the penny dropped. Now I bind the service to a loopback address inside the block and let BGP carry it, which is the well-trodden anycast-ish pattern and works a treat.
Is this overkill for a house? Completely. A pair of static routes and a bit of discipline would do the same job for the size of network I actually have. But the failover is genuinely nice (kill a host and the route withdraws within the hold timer, traffic shifts, nothing to touch by hand) and the thing I didn't expect to value most is the learning. I understand route advertisement, AS paths, and why a hold timer matters far better for having broken it at home a dozen times than I ever did from the manuals.
The honest summary: I do not need BGP at home. I enjoy BGP at home, it removes a class of manual edits I always got wrong, and it has made me better at the day job. "Because why not" is doing some work in that title, but only some.