Does admin_print_scripts-$hook_suffix work for nested paths to individual files?

I think it’s really a question of whether that code is giving the correct hook name for the given page.

Here’s a simple function you can use to output the hook suffix on each admin page, it will appear inside a red error box(so it’ll be easy to spot) for admins only.

add_action( 'admin_notices', 'print_admin_pagehook' );
function print_admin_pagehook() {
    global $hook_suffix;
    if( !current_user_can( 'manage_options') )
        return;
    ?>
    <div class="error"><p><?php echo $hook_suffix; ?></p></div>
    <?php 
}

Load up the page you’re having a problem with and compare the value you see in the box with what you’re getting back from the code you posted.

Addition
Following on from my last comment, you can actually do something like this..

add_action( 'admin_menu', 'testing_registered_pages', 100 );
function testing_registered_pages() {
    global $_registered_pages, $submenu;
    $plugin_scripts = array( 
        'Question Form' => array( 'page' => 'question_form', 'callback' => 'my_callback_1' ), 
        'Manage Questions' => array( 'page' => 'manage_questions', 'callback' => 'my_callback_2' ) 
    );
    foreach( $plugin_scripts as $title => $my_pages ) {
        $hookname = get_plugin_page_hookname("my-quiz/lib/admin/$my_pages[page]", 'my-quiz' );
        $_registered_pages[$hookname] = true;
        $submenu['my-quiz'][] = array( $title, 'manage_options', "my-quiz/lib/admin/$my_pages[page]", $title );
        add_action( $hookname, $my_pages['callback'] );
    }
}

// Remove the add_action to reference actual files, leave in place to use a callback function

…there’s just one problem with this approach, and that’s in being able to defeat the capability requirements of the page(s).

Take this URL.

example.com/wp-admin/admin.php?page=my-quiz/lib/admin/manage_questions

We can defeat the cap check by querying for..

example.com/wp-admin/admin.php?page=my-quiz/lib/admin/manage_questions.php

If we switch the code from earlier to use the file extension instead, eg..

    $plugin_scripts = array( 
        'Question Form' => array( 'page' => 'question_form.php', 'callback' => 'my_callback_1' ), 
        'Manage Questions' => array( 'page' => 'manage_questions.php', 'callback' => 'my_callback_2' ) 
    );

..and optionally disable callbacks, ie. use a real file..

// add_action( $hookname, $my_pages['callback'] ); 

..this then gives us..

example.com/wp-admin/admin.php?page=my-quiz/lib/admin/manage_questions.php

..it’s still possible to defeat capability requirements using..

example.com/wp-admin/admin.php?page=my-quiz/lib/admin/manage_questions

Regardless of whether you use an actual file or a callback function, in either case the capability requirements(as above) can be circumvented(obviously this would not be desired behaviour).