Plugin custom Action Hook not working

Your plugin needs to wait for the themes functions.php file to be loaded. Try this:

<?php
/*
Plugin Name: Demo Plugin
Version: 1.0
*/

add_action( 'after_setup_theme', function() {
    do_action( 'basic_action_demo' );
} );
?>

The after_setup_theme hook is run immediately after functions.php is loaded.

Update for your comment below.
In your plugin create a function for your form:

<?php
/*
Plugin Name: Demo Plugin
Version: 1.0
*/

function output_my_form () {
    echo "I'm a form";
    // do your action here
    do_action( 'basic_action_demo' );
}
?>

Then in your theme’s functions.php:

if ( function_exists( 'output_my_form' ) ) {
    output_my_form();
}

This is a simple example. In reality you would want to call that function from a form.php in your theme.