It's perfectly fitted to make your own widget or add new one. Almost all our widgets are subclassed from another one, and we believe that the simplicity to make your own widget speed up the testing process. We even think that if you don't have a perfect widget that fit to your need, it sometimes simpler to subclass and changes or add new behavior / graphics.
Check:
http://kivy.org/docs/guide/firstwidget.html#your-first-widge... for a complicated widget that tracing all the touches + trails
What's make Kivy specific to NUI is we have an approach that combine every possible input into one event. That's unlikely because most of times, you have event for specific device (on_mouse_down/move.., on_object_down/move..., on_touch_... )
Here, we have uniq event dispatch, and extensible motion event that deliver all the data he can deliver (position, angle, acceleration, image...). It's called profile, and a motion event can deliver information according to one or more profile. For example, the mouse will fill properties of the "pos" profile, instead of Wacom tablet that will fill "pos", "pressure", or even TUIO with fiducials object that will fill "markerid" and "angle".
Then you can do specific interaction or filter specific motion event according the profiles delivered in the current touch.
All the widgets are made using that approach, make it possible multiple interactions at the same time.
Not sure if it'm 100% clear, best is to read & try :)