Does cargo run -p horned-bin --bin horned-round work for you? (it's the former of your two suggested solutions, i.e. -p tells cargo to use the horned-bin package as context)
I am a bit confused by the documentation, since I don't use the term "package" very often in Rust, and as far as I can see it is not a package that I want to run, but a specific crate, which is in the current package.
That's correct. You have your workspace that contains packages. A package has a Cargo.toml manifest file and contains crates. Binary crates can be executed with cargo run. So in your case you have the horned-owl workspace containing the horned-bin package with the horned-round binary crate.
Every binary is its own crate. A crate is basically the atomic unit of a Cargo project, there is nothing "smaller". Only crates are compiled, a package and a workspace are just organisational units that allow you to better structure your project and to re-use build artefacts more efficiently.
If you set workspace.default-members to include "horned-bin", then you won't need the -p option. This also makes commands like cargo check and cargo fmt include both packages by default.
("Virtual manifest" workspaces, which don't have any package at the top level, get this by default.)