Your problem is the MPLABX project is not setup correctly.
When you do not setup the code section start addresses the linker uses a default behavior, that Microchip using God like wisdom, has the XC8 linker locate code starting from the highest memory location. This "feature" causes the linker start the last instruction word of your code at address 0xFF in the PIC10F200 address space.
User code is not "supposed" to overwrite the last instruction word of baseline PIC controllers. The linker "should" produce a diagnostic message when a project tries to do this. I don't see one.
Now MPLABX and the device programming tools make your situation more complex.
This location is "protected" by the MPLABX IDE so even though your code placed a RETLW 0 instruction at address 0xFF the simulator puts a MOVLW 0 instruction at this location. The device programming tools go a bit further in they read the instruction word at this location, erase the part, write the code (except this location), then restore the previously read instruction word.
This is why the return instruction at the end of your delay function goes missing and the program counter winds up at address 0x00.
To get this to work the MPLABX project must be setup to set the address of the code sections for the target PIC controller correctly.
The pic-as(v2.xx) tool chain requires an explicit command line option to do this. There is an addition bug with the XC8 linker that requires another command line option as a workaround as well.
This is your code updated to build correctly with MPLABX:
; File: main.S
; Target: PIC10F200
; Author: dan1138
; Date: 2021-MAR-10
; Compiler: pic-as(v2.30)
; IDE: MPLABX v5.40
; Example 2 project for the PIC10F200 controller using the pic-as(v2.31) tool chain.
; Add this line in the project properties box "pic-as Global Options -> Additional options":
; -Wa,-a -Wl,-DCODE=2,-pStartCode=0h,-pResetVec=0ffh
; Include target specific definitions for special function registers
; Set the configuration word
config WDTE = OFF ; Watchdog Timer (WDT disabled)
config CP = OFF ; Code Protect (Code protection off)
config MCLRE = ON ; Master Clear Enable (GP3/MCLR pin function is MCLR)
; Declare one byte in RAM
global Delay_v1, Delay_v2
Temp: DS 1
Delay_v1: DS 1
Delay_v2: DS 1
; See: https://electronics.stackexchange.com/questions/550331/pic10f200-blinking-led-pic-as-assembly
movwf OSCCAL ;Set factory default for the oscillator calibration
;osccal register is at 05h
option ;to turn off T0CKI
#ifdef CMCON0 ;CMCON0 is at 07h, but it exists only for the PIC10F206
movlw 01110001B ;bit 3 to 0 for turning comparator off
movlw 11111101B ;set GP1 to output direction
;gpio is at 06h ;GP1 is bit 1 (could also try 01h)
BSF GPIO,GPIO_GP1_POSITION ;turn LED off again
goto Loop ;loop forever
movlw 100 ;put the decimal number 100 into w
movwf Delay_v1 ;put 100 in register 0Ah
;register 11h should be general purpose register that I can use
;to put in values
;put 100 in 12h
;decrement the register and store the result in itself
;and skip the next instruction if the result was zero
;the same with the second register that I filled
; The PIC10F200 reset vector is the highest
; instruction word in the code space.
; This is used to load the WREG with the factory
; oscillator calibration value then the program
; counter rollover to zero to start the code.