Force plugin to fail activation

Code like this can do the trick.

function plugin_activation_check(){
    if ( some_check_here() ) {
        // this is the fail case
        deactivate_plugins(basename(__FILE__)); // Deactivate ourself
        wp_die("Message to user.");
    }
}
register_activation_hook(__FILE__, 'plugin_activation_check');