1) The GtkIconView uses the same concept as the GtkTreeView - both has an underlying model. When you click on an icon, you will also get a pointer to the model. In the model, in the sample code, I use 2 columns only. The first column to store the image and the second to store the filename. If you need the filename, even though it's not displayed, you can still access it in column 1 of the model.
So first add the callback function that responds to user selection. The callback function will sends you a pointer to the selection. From the selection, you can get access to the $model and $iter. With these 2 variable, you can access column 1 of the model.
2) It can be done, but you have to code everything.
Please refer to the following sample code: Sample Code 347: How to scroll to newly inserted item in a linear list using GtkTreeView - Part 1 - using GtkTreeView scroll_to_cell?
a) Basically, you need a pointer to manually keep track of the current row number. Suppose this is $n.
b) When uesr presses the Up button, $n = $n - 1;
c) When user presses the Down button, $n = $n + 1;
d) Then use GtkTreeView::scroll_to_cell() to scroll to the $nth row
Hope this helps.