Интерпретируемые языки должны читать и интерпретировать ваш исходный код во время выполнения. В случае скомпилированного кода большая часть этой интерпретации выполняется заранее (во время компиляции).
Хорошо, наконец-то разобрался с этим (и, черт возьми, я чувствую себя глупо).
node_save теперь работает с существующим объектом узла (уже определенным в $ issue в моем случае) и просто добавляет поле nid (среди прочего) к существующему объекту. Ничего не возвращается, но я могу получить доступ к nid с помощью $ issue-> nid после запуска node_save.