Можно ли магическим образом создать объект?
Вы всё делаете правильно, метод render() и не должен быть статическим, но что бы всё заработало корректно, вам нужно использовать другой вид записи.
Router::get('/', 'Неймспейс\\SiteController@home');
Либо использовать PHP 8.0

Постараюсь вкратце пояснить почему.
Когда вы пишете такую конструкцию
use App\Controllers; // к примеру
//...

Router::get('/', [SiteController::class, 'home']);
SiteController::class как бы так сказать, преобразуется в App\Controllers\SiteController

Но автор библиотеки плевать хотел на эти ваши неймспейсы и всё что вы там себе придумали.  
Он берёт данные, которые вы передали и получает массив вида
[
    0 => 'App\Controllers\SiteController',
    1 => 'home'
];
Потом проверяет этот массив на is_callable()
https://github.com/skipperbent/simple-php-router/b...

А такое выражение до PHP8 возвращает true, поэтому всё это дело отправляется дальше на исполнение в
call_user_func_array() пытаясь вызвать метод статически
https://github.com/skipperbent/simple-php-router/b...
Отсюда и ошибка.
Объект же класса ещё не создан
---
Автор предлагает все неймспейсы указать отдельным методом до старта
SimpleRouter::setDefaultNamespace('App\Controllers');
Тогда можно указывать класс без неймспейса и всё будет работать.

Но в этом случае любой анализатор кода либо тот же Шторм скажет вам, что вы делаете какую-то дичь.
И как поступить решать уже вам.
Может так?
Router::get('/', [new SiteController(), 'home'])