MyLifeOrganized handles time requirement well, and you could easily set up a reading parent task broken down into 10 children tasks as you describe. When you know you have 30 minutes available, you can filter to show just the tasks that will fit that time available.
Personally, I wouldn't bother creating the 10 subtasks. I would just create one task "Read Book X," set the time requirement to the lowest amount that makes sense, like 10 minutes, and then check it off when the entire book is done.
You really don't need software to figure out you have 30 minutes available. It's trivial for your brain.
Some things are easy for the brain, hard for software.
Other things are easy for software, hard for brain. You want to use software only for this type of thing.