Using map is really going to simplify things.
(define transpose
(lambda (m1)
(if (null? (car m1))
null
(cons (map car m1)
(transpose (map cdr m1))))))
Rest is usually the same as cdr, and you don't want that, you want to map cdr onto the matrix representation to get past the first row. You've done this in indiv nicely, but the problem is it won't scale to larger matrices.
The reason your doesn't work is it calls tranpose on the rest of '((1 2) (4 5)) which is '((4 5)) whose cdr has no car. (it's the null list) and you hit an error.