seems like the best way to do lossless image (jpeg) rotation in python is to use the commands jpegtrans and jhead, both open source, but command line.
easy enough to wrap in a system call of sorts (subprocess.Popen)

see simple browser gallery for examples.

http://www.google.com/search?hl=en&client=firefox-a&rls=org.mozilla%3Aen-US%3Aofficial&hs=Q87&q=python+lossless+rotation&btnG=Search
python lossless rotation - Google Search
http://image2docinfo.sourceforge.net/
Image2DocInfo
http://www.sentex.net/~mwandel/jhead/
Exif Jpeg header manipulation tool
http://www.ijg.org/
Independent JPEG Group
http://image2docinfo.sourceforge.net/shot.html
ScreenShots
http://image2docinfo.sourceforge.net/#download
Image2DocInfo
http://www.faqs.org/faqs/jpeg-faq/
JPEG FAQ Index
http://www.google.com/search?q=jpegtran&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:en-US:official&client=firefox-a
jpegtran - Google Search
http://sylvana.net/jpegcrop/
JPEGclub.org
http://sylvana.net/jpegcrop/jpegtran/
New jpegtran features
http://en.wikipedia.org/wiki/Libjpeg
libjpeg - Wikipedia, the free encyclopedia
http://linux.about.com/library/cmd/blcmdl1_jpegtran.htm
jpegtran - Linux Command - Unix Command
http://www.google.com/search?q=jhead&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:en-US:official&client=firefox-a
jhead - Google Search
http://www.sentex.net/~mwandel/jhead/
Exif Jpeg header manipulation tool
http://www.sentex.net/~mwandel/jhead/usage.html
http://www.sentex.net/~mwandel/jhead/usage.html
http://pagesperso-orange.fr/pierre.g/xnview/enhome.html
XnView
http://pagesperso-orange.fr/pierre.g/xnview/endownload.html
XnView
http://pagesperso-orange.fr/pierre.g/xnview/enscreenshots.html
XnView