以下の呼び出しはaがアサインされてないよと言われて失敗してしまうんですが
そういうものなんですかね?

def maker(a):
  # return lambda(c): a + c
  def f(c):
    a = a + c
    return a
  return f

f = maker(3)
print f(4)

左辺値のaを別の変数にすれば動きます。