Thank you for replying. I did some tinkering and reached this solution:
// Load order
$orderClass = hikashop_get('class.order');
$order = $orderClass->loadFullOrder($orderid);
// These properties should be removed before attempting to save the order
unset($order->order_subtotal);
unset($order->order_subtotal_no_vat);
// Change order status
$order->order_status = 'shipped';
// Set email to user's language
$langparams = json_decode($order->customer->params);
$lang = isset($langparams->language) ? $langparams->language : null;
$langObj = JFactory::getLanguage($lang);
$langObj->load('com_hikashop', JPATH_SITE);
// Set new history entry
$order->history = new stdClass();
$order->history->history_notified = '1';
$order->history->history_type = 'shipment';
// Save order to DB
$orderClass->save($order);
It seems to work fine.
The function modifyOrder seems to have a lot of payment-flow code which isn't relevant to my plugin. I compared the above code snippet with modifyOrder and the above seems to be a boiled down version of it.
Thank you again for your help!