Combining the image and the text should be no problem; just create a GtkImage and a GtkLabel, pack both into a GtkHBox, and add that to the button. In GTK+, buttons are containers, and can hold any combination of widgets. Adjust the packing parameters to the image is small, and the label gets the remaining space.
The flashing of the background is harder; GtkLabels don't render their background, so they can't affect the color of that area. You could probably flash the foreground color easily enough (using inline HTML in the label text, for instance), you might want to start off with that and then revisit the issue once you've learned more of GTK+.
Stuff each finished button into a GtkVBox, and place that in a GtkScrolledWindow to get the scrolling display.
UPDATE: To learn which button gets clicked, you need to connect a handler for the "clicked" signal:
static void cb_button_clicked(GtkButton *button, gpointer user)
{
printf("Whaddaya know, button number %d was clicked!\n", GPOINTER_TO_INT(user));
}
... elsewhere, when building the button ...
GtkWidget *btn;
btn = gtk_button_new_with_label("My fancy button");
g_signal_connect(G_OBJECT(btn), "clicked", G_CALLBACK(cb_button_clicked), GINT_TO_POINTER(42));
The above code builds a simple labelled button, your code will obviously be more complex but this doesn't change how the signal handler is attached.