Touchpoint will only do what you tell it to. The most common way of using it is to use its handleEvents call, which transforms monitor_touch events on its buttons into button_click events. You can fairly easily integrate this into your existing event handling loop alongside the timer events you're using to update the other things you're displaying.
You can custom specify the exact contents of the button labels by renaming then with a table of strings rather than a textual label. This will allow you to override the margins that Touchpoint typically enforces. Simply have a string as long as the button is wide for each row of the button's height. A three-high, four-wide button named "nums" could be labeled this way like this:
t:rename("nums", {"1234", "5678", "90ab", label = "nums"})
You can also declare the buttons initially with that table structure in place of the name. Just don't forget to include a label in the table!
Looks like you forgot the parentheses on the draw call, it should be t:draw().
Also, I see that you're sleeping in your main loop. That's not going to work for what you're trying to do. You're going to want to separate out your drawing routine from the information gathering. You'll want to create a redraw function that you call any time you get a button click or you've fetched updated information from the reactor. You can also get away with fetching information much less often. Once per second should be more than enough.
You'll want to create an event handling loop that will handle timer events as well as button events. The timer event handling would fetch a new set of information from the reactor, then call your redraw function and start a new timer. The button click event handling would react to the button being pressed (since you have functions for each button, this is as easy as t.buttonList[p1].func(), assuming p1 is the first argument after the event name for the returned event data).