There is a Tkinter + Leap Motion example here: Leap_Touch_Emulation
I wrote it, and it is the only Tkinter program I have written, but it does illustrate the basics of creating and using a listener.
1) Yes, Leap Motion listeners are multithreaded -- each callback function is executed on a separate thread.
You could also just get the Leap Motion tracking data at a convenient point in the Tkinter loop -- and not use a listener at all. It looks like the after() function would be a good place to do this:
from Tkinter import *
import Leap
root=Tk()
controller = Leap.Controller()
def task():
frame = controller.frame()
root.after(1/60,task) # 60 fps
root.after(1/60,task)
root.mainloop()
(adapted from: How do you run your own code alongside Tkinter's event loop)
This can improve the responsiveness of you application since you are only processing one frame of Leap Motion tracking data per main loop iteration instead of up to 4.
2) That's a different question, and probably not the type appropriate for stack overflow. For non-graphic-intensive samples I use Tkinter because it is built-in. For things with types of drawing that aren't easily achievable with Tkinter, I've been using pyglet/OpenGL.