To make a last note on this for posterity:

Scripting potions for AP recovery* (and increasing AP max for this purpose), as Baardvark did, is really the only way to get at least something similar (regarding AP costs) to sneaking of Classic Version (but be aware that a specific potion can't be unconsumed by char script, only by Osiris, and permanent potions - "Duration" "-1" - can't be unconsumed at all, unless you apply a potion with reverted values).
* there's no way to refund AP for a character on active turn

I tried to apply the sneak status via script yesterday and, re-reading this thread, I see Baardvark already tried that months ago. That it never made it into Scales, I suppose, (only AP recovery potions to compensate the 5 AP sneak costs did) has the simple reason that even a scripted sneak status (via char script or Osiris) consumes 5 AP in combat.
I used an item (instead of a skill) to apply the sneak status via script (AP costs depending on the sneak ability level), for skills removing invisibility. Technically this works fine, but this doesn't prevent the engine from removing 5 AP when a character gets the sneak status in combat. This cannot be bypassed.

For interest how this would have looked like:

Code
INIT

INT:%APToUse

EVENTS

EVENT AddSneakItem
VARS
	INT:_SneakItemAdded = 0
ON
	OnInit()
ACTIONS
	IF "c1&c2"
		CharacterIsPlayer(__Me)
		IsEqual(_SneakItemAdded,0)
	THEN
		Set(_SneakItemAdded,1)
		CharacterAddToInventory(__Me,"Sneaking_Enable",1)
	ENDIF
	
EVENT ApplySneaking
VARS
	FLOAT:_AP
	FLOAT:_APCosts
	INT:_Sneaking
	ITEM:_Item
	ITEMTEMPLATE:_Template
	ITEMTEMPLATE:_SneakTemp = "Other_SneakingActivation_28043f27-fbe6-4d0f-96f5-db78d3ca5d90"
ON
	OnUseItem(__Me,_Item)
ACTIONS
	IF "c1&c2"
		ItemGetTemplate(_Item,_Template)
		IsEqual(_Template,_SneakTemp)
	THEN
		IF "c1&c2"
			CharacterGetAbility(_Sneaking,__Me,Sneaking)
			CharacterGetStat(_AP,__Me,ActionPoints)
		THEN
			IF "c1"
				IsEqual(_Sneaking,0)
			THEN
				Set(_APCosts,5)
			ELIF "c1"
				IsEqual(_Sneaking,1)
			THEN
				Set(_APCosts,4)
			ELIF "c1"
				IsEqual(_Sneaking,2)
			THEN
				Set(_APCosts,3)
			ELIF "c1"
				IsEqual(_Sneaking,3)
			THEN
				Set(_APCosts,2)
			ELIF "c1"
				IsEqual(_Sneaking,4)
			THEN
				Set(_APCosts,1)
			ELIF "c1"
				IsEqual(_Sneaking,5)
			THEN
				Set(_APCosts,1)
			ELIF "c1"
				IsEqual(_Sneaking,6)
			THEN
				Set(_APCosts,0)
			ENDIF
			IF "!c1&!c2"
				IsLessThen(_AP,_APCosts)
				CharacterHasStatus(__Me,SNEAKING)
			THEN
				Cast(%APToUse,_APCosts)	
				CharacterApplyStatus(__Me,SNEAKING,-1)
				StartTimer("RemoveAP",1,0)
			ELSE
				DisplayText(__Me,"APTooLowOrSneakActive",2)
			ENDIF
		ENDIF	
	ENDIF
	
EVENT RemoveSneakingAP //a delayed sneak check before removing AP is necessary to ensure that the sneak status wasn't immediately removed after application, because of sneak spotters
ON
	OnTimer("RemoveAP") 
ACTIONS
	IF "c1"
		CharacterHasStatus(__Me,SNEAKING)
	THEN
		CharacterUseActionPoints(__Me,%APToUse)
	ELSE
		DisplayText(__Me,"SneakingFailed",2)
	ENDIF



My mods for DOS 1 EE: FasterAnimations - QuietDay - Samaritan