I ended up using BeautifulSoup directly. That is something lxml.html.soupparser uses for parsing HTML.
BeautifulSoup has a prettify method that does exactly what it says it does. It prettifies the HTML with proper indents and everything.
BeautifulSoup will NOT fix the HTML, so broken code, remains broken. But in this case, since the code is being generated by lxml, the HTML code should be at least semantically correct.
In the example given in my question, I will have to do this :
from bs4 import BeautifulSoup as bs
root = lh.tostring(sliderRoot) #convert the generated HTML to a string
soup = bs(root) #make BeautifulSoup
prettyHTML = soup.prettify() #prettify the html