You can use wp_insert_post
to insert a physical page, though I would suggest creating one page for the plugin and then using a rewrite rule to give all of your items a URL with that single page as the base.
EDIT
quick rewrite example with added query var:
function wpa55546_rewrites(){
$page_slug = 'your-page';
// urls will be in the form
// /your-page/42/
add_rewrite_rule(
$page_slug . '/([0-9]+)/?$',
'index.php?pagename=" . $page_slug . "&my_id=$matches[1]',
'top'
);
}
add_action( 'init', 'wpa55546_rewrites' );
function wpa55546_query_vars( $query_vars ){
$query_vars[] = 'my_id';
return $query_vars;
}
add_filter( 'query_vars', 'wpa55546_query_vars' );
then in the template you’ll have access to the value of your query var:
echo get_query_var( 'my_id' );
you’ll also have to flush rewrite rules at the appropriate time.