キーワード引数は関数の型との兼ね合いだろうな
fn foo(a: u32)

fn foo(a: u32, b: u32 = 0)
に変えたときに
F: Fn(u32)
に渡せるかみたいなややこしい話が出てくる

最初から
fn foo(a: u32, opt_args: FooOptArgs)
で頑張ってもらった方が分かりやすい