WordPress Plugin manipulate have_posts()

The standard query for posts uses orderby => 'post_date' and order => 'DESC'. The best candidate for arbitrary sort of posts would be orderby => 'menu_order' and order => 'ASC'. The menu_order is not generally used for posts but it is safe to be used. As suggested by Pieter Goosen use action hook pre_get_posts:

add_action( 'pre_get_posts', 'your_function_name' );
function your_function_name( $query ) {
    if ( !is_admin() && is_home() && $query->is_main_query() ) {
        $query->set( 'orderby', 'menu_order' );
        $query->set( 'order', 'ASC' );
    }
}

The above is for front end. For back end use visual drag and sort jquery and update the database. You can check the logic in pageMash plugin.