MySQL also supports row constructors. If you wanted (e.g.) 1 1:3 through 1 2:2, use:
SELECT * FROM bible
WHERE (1,1,3) <= (book, chapter, verse) AND (book, chapter, verse) <= (1,2,2)
For 58 1:3 to 62 4:2,
SELECT * FROM bible
WHERE (58,1,3) <= (book, chapter, verse) AND (book, chapter, verse) <= (62,4,2)
58 1:4 will be included, as will 59 1:1 and 60 10:10, but not 62 5:1.
I can't find much documentation, but MySQL follows the behavior set down for row comparisons since SQL-92 (note: the link is to a draft version), specifically Section 8.2 "General Rules" 7):
Let Rx and Ry be the two row value constructors of the comparison predicate and let Rxi and Ryi be the i-th row value constructor elements of Rx and Ry, respectively. "Rx [comp op] Ry" is true, false, or unknown as follows:
[...]
c) "Rx < Ry" is true if and only if Rxi = Ryi for all i < n and Rxn < Ryn for some n.
d) "Rx > Ry" is true if and only if Rxi = Ryi for all i < n and Rxn > Ryn for some n.
e) "Rx <= Ry" is true if and only if Rx = Ry or Rx < Ry.
f) "Rx >= Ry" is true if and only if Rx = Ry or Rx > Ry.
Row comparisons are covered in section 9.2 Joe Celko's SQL For Smarties (link is to 3rd Ed., but the same topic existed in earlier editions).