If you want to use pyparsing, you could do so without any postprocessing as follows.
import pyparsing as pp
integer = pp.Word(pp.nums).setParseAction(lambda m:int(m[0]))
expr = pp.Forward()
expr << pp.nestedExpr(content=pp.OneOrMore(integer | expr))
manyExpr = pp.OneOrMore(expr)
print manyExpr.parseString('(2 (10 (5 11))) (5 6) (4)')
#returns [[2, [10, [5, 11]]], [5, 6], [4]]
This first defines an integer as something consisting only of numbers, and tells pyparsing how to convert it from a string of numbers to an integer object. Next, it makes defines an expression as a list of expressions or integers inside parentheses. Finally, in order to parse your example, it looks for many consecutive expressions.