The most obvious question, I know, but... why not just use plain Bash?
I've been writing my own "task runner" which seems to have some of the same features. I'd say some pros: A nice view of that has run (what has failed, etc.) - which otherwise could be drowned-out by stderr and stdout. Timing information for each "task". Can organize nested tasks. Save all in a structured log.
It's in the title: "a beautiful"
It looks nicer.
I use good old GNU Make.
Or something like Ansible? Which is battle tested, provides idempotency for most things, and has a large library of tasks it knows how to do.