Partitioning a multidimensional list into blocks using element positions

You can use Transpose:

List /@ Transpose[list1, {2, 3, 1}] == list2

True

J.M. shared two similar solutions in his comment below:

Transpose[{list1}, {2, 3, 4, 1}]

and

Flatten[{list1}, {{4}, {1}, {2}, {3}}]

tmp = Map[#\[Transpose]&,list1]\[Transpose]
res = Map[{#}&,tmp]

out: {{{1, 6}, {11, 16}}, {{2, 7}, {12, 17}}, {{3, 8}, {13, 18}}, {{4, 
9}, {14, 19}}, {{5, 10}, {15, 20}}}
out: {{{{1, 6}, {11, 16}}}, {{{2, 7}, {12, 17}}}, {{{3, 8}, {13, 
18}}}, {{{4, 9}, {14, 19}}}, {{{5, 10}, {15, 20}}}}

TrueQ[res==list2]
out: True

EDIT:

The answer by C.E., as well as the suggestion in the comment to this answer, are about 2 times faster than my answer, on my computer. Although I think my answer is quite intuitive, it is clearly not the most efficient, which is important if you are considering large data sets.